首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET WebAPI:如何控制返回给客户端的字符串内容?

ASP.NET WebAPI:如何控制返回给客户端的字符串内容?
EN

Stack Overflow用户
提问于 2012-10-30 03:05:05
回答 1查看 14K关注 0票数 17

在WebAPI中,假设我返回一个包装在HTTP响应中的字符串:

代码语言:javascript
复制
return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");

从jQuery调用此操作时,在返回响应文本之前会对其进行处理。因此,在xhr中,我得到了如下内容:

代码语言:javascript
复制
function success(xhr) {
    alert(xhr.responseText); // alerts ""Line1 \\r\\n Line2""
}

换句话说,字符串被括在双引号中,特殊字符被转义,以便它们出现在输出中(实际的警报是"Line1 \r\n Line2",因此不会保留换行符,而是对其进行编码并显示在响应文本中)。

我可以通过删除引号并替换客户端上的换行符来解决此问题,如下所示:

代码语言:javascript
复制
var responseText = xhr.responseText.substr(1, xhr.responseText - 2)
    .replace('\\r', '\r').replace('\\n', '\n');

但是有没有办法告诉WebAPI如何格式化字符串响应呢?例如,不将它们括在双引号中并转换转义字符?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-30 04:40:28

这是因为您的控制器返回的JSON中有字符串值被引用。

一个简单的解决方案是将responseText解析为JSON,然后您可以按预期使用该值:

代码语言:javascript
复制
$.ajax("/api/values/10", {
    error: function (xhr) {
        var error = JSON.parse(xhr.responseText);
        $("textarea").val(error);
    }
});

这正确地解释了换行符/回车符。

或者,您可以在控制器中指定text/plain媒体类型:

代码语言:javascript
复制
return Request.CreateResponse(
    HttpStatusCode.BadRequest, 
    "Line1 \r\n Line2", "text/plain");

然后Web将尝试为text/plain加载一个合适的媒体类型格式化程序,不幸的是,OOTB并不存在。您可以在WebApiContrib中找到一个。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13128013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档