我希望能够从我的(自托管)web-api返回自定义错误。
我在服务器配置中设置了以下标志...
HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(baseAddress);
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
在服务器端Controller中,我有类似下面的内容
public HttpResponseMessage Post(MyDatadata)
{
// do stuff and received an error back..
HttpError error = new HttpError("test test");
error.Add("mycode", "abcd");
error.Add("mymdetails", "my detailed message");
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, error);
}
然而,在我的Javacript做帖子时,我无法解决任何这些错误。
我会有
$.ajax({
type: 'POST',
url: 'postUri',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data)
})
.fail(function(jqXhr, textStatus, errorThrown) {
var ttt = JSON.parse(jqXhr.responseText).message;
if (jqXhr.getResponseHeader('Content-Type').indexOf('application/json') > -1) {
// only parse the response if you know it is JSON
var error = $.parseJSON(jqXhr.responseText);
alert(error.Message);
} else {
alert('Fatal error');
}
});
但是jqXhr.responseText总是一个空字符串,我看不到传递给.error的数据中的其他任何地方的字符串
当我在fiddler(原始视图)中查看响应时,我确实看到了这些字符串..
HTTP/1.1 500 Internal Server Error
Content-Length: 91
Content-Type: application/json; charset=utf-8
Server: Microsoft-HTTPAPI/2.0
Date: Sun, 09 Feb 2014 01:20:31 GMT
{
"message": "test test",
"mycode": "abcd",
"mymdetails": "my detailed message"
}
但我只是看不到如何从Javascript中获取这些内容
有人知道这里有什么问题吗?
提前感谢您提供任何信息!
答案 0 :(得分:0)
我将回答这个问题,再看一下(使用$ .post的新示例),数据确实在jqXhr.responseText中(正如其他帖子所示)
也许以前在服务器端出现了问题,我没有做正确的事情(我创建了一个新的示例服务器来玩web-api 2)