在的WebAPI,说我回包裹在一个HTTP响应的字符串:
return Request.CreateResponse(HttpStatusCode.BadRequest, "Line1 \r\n Line2");
当调用从jQuery的这个动作,返回之前的响应文本处理。 所以在XHR,我得到的是这样的:
function success(xhr) {
alert(xhr.responseText); // alerts ""Line1 \\r\\n Line2""
}
换句话说,该字符串被双引号括起来,和特殊字符获取逃脱,使他们出现在输出(实际的警告是“线路1 \ r \ n 2号线”,所以换行不保留,而是编码和显示响应文本)。
我可以通过删除引号并在客户端上替换换行,像这样解决这个问题:
var responseText = xhr.responseText.substr(1, xhr.responseText - 2)
.replace('\\r', '\r').replace('\\n', '\n');
但是,有没有办法告诉的WebAPI如何格式化字符串的反应? 例如,不要将它们包装在双引号和转换转义字符?
这是因为你的控制器返回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 API会尝试加载合适的介质类型格式的text/plain
不幸的是不存在的开箱即用。 你会发现一个在WebApiContrib 。
你是什么之后是一个自定义MediaTypeFormatter。 这听起来像你想实现自己的自定义的更换和现有的或正在创建新的自定义一个一起取决于什么什么Accept头你期待。 好消息是,你可以换出现有的或想出了一个新的MediaType你喜欢。 这将帮助你开始可以在这里找到一对夫妇的地方:
http://byterot.blogspot.com/2012/04/aspnet-web-api-series-part-5.html
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters
是的,其实我已经在小部分做到了这一点,因为我已经换了一些默认的格式如JSON与更快的一个,即ServiceStack和它的伟大工程。