在WebAPI中,假设我返回一个包装在HTTP响应中的字符串:
return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");
从jQuery调用此操作时,在返回响应文本之前会对其进行处理。因此,在xhr中,我得到了如下内容:
function success(xhr) {
alert(xhr.responseText); // alerts ""Line1 \\r\\n Line2""
}
换句话说,字符串被括在双引号中,特殊字符被转义,以便它们出现在输出中(实际的警报是"Line1 \r\n Line2",因此不会保留换行符,而是对其进行编码并显示在响应文本中)。
我可以通过删除引号并替换客户端上的换行符来解决此问题,如下所示:
var responseText = xhr.responseText.substr(1, xhr.responseText - 2)
.replace('\\r', '\r').replace('\\n', '\n');
但是有没有办法告诉WebAPI如何格式化字符串响应呢?例如,不将它们括在双引号中并转换转义字符?
发布于 2012-10-30 04:40:28
这是因为您的控制器返回的JSON中有字符串值被引用。
一个简单的解决方案是将responseText
解析为JSON,然后您可以按预期使用该值:
$.ajax("/api/values/10", {
error: function (xhr) {
var error = JSON.parse(xhr.responseText);
$("textarea").val(error);
}
});
这正确地解释了换行符/回车符。
或者,您可以在控制器中指定text/plain
媒体类型:
return Request.CreateResponse(
HttpStatusCode.BadRequest,
"Line1 \r\n Line2", "text/plain");
然后Web将尝试为text/plain
加载一个合适的媒体类型格式化程序,不幸的是,OOTB并不存在。您可以在WebApiContrib中找到一个。
https://stackoverflow.com/questions/13128013
复制相似问题