dan*_*wig 17 httpresponse string-formatting asp.net-web-api
在WebAPI中,假设我返回一个包含在HTTP响应中的字符串:
return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");
Run Code Online (Sandbox Code Playgroud)
从jQuery调用此操作时,响应文本将在返回之前得到处理.所以在xhr中,我得到这样的东西:
function success(xhr) {
alert(xhr.responseText); // alerts ""Line1 \\r\\n Line2""
}
Run Code Online (Sandbox Code Playgroud)
换句话说,字符串用双引号括起来,特殊字符被转义,以便它们出现在输出中(实际警报是"Line1\r \n Line2",因此新行不会被保留,而是编码并显示在响应文本).
我可以通过删除引号并替换客户端上的换行符来解决这个问题:
var responseText = xhr.responseText.substr(1, xhr.responseText - 2)
.replace('\\r', '\r').replace('\\n', '\n');
Run Code Online (Sandbox Code Playgroud)
但有没有办法告诉WebAPI如何格式化字符串响应?例如,不要用双引号将它们包装起来并转换转义字符?
Ben*_*ter 18
发生这种情况是因为您的控制器返回引用了字符串值的JSON.
一个简单的解决方案是解析responseText为JSON,然后您可以按预期使用该值:
$.ajax("/api/values/10", {
error: function (xhr) {
var error = JSON.parse(xhr.responseText);
$("textarea").val(error);
}
});
Run Code Online (Sandbox Code Playgroud)
这正确地解释了换行符/回车符.
或者,您可以text/plain在控制器中指定媒体类型:
return Request.CreateResponse(
HttpStatusCode.BadRequest,
"Line1 \r\n Line2", "text/plain");
Run Code Online (Sandbox Code Playgroud)
然后,Web API将尝试加载适当的媒体类型格式化程序,text/plain但遗憾的是OOTB不存在.你会在WebApiContrib中找到一个.
| 归档时间: |
|
| 查看次数: |
13522 次 |
| 最近记录: |