我有以下代码:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static MyResponse myMethod(ParameterClass parameters)
{
MyResponse resp = new MyResponse();
resp.errors.Add("Some error message");
HttpContext.Current.Response.StatusCode = 400;
return resp;
}
使用url MyPage.aspx / myMethod与jQuery.ajax一起运行此调用,此调用不会从MyResponse对象返回我的有效载荷。一旦将状态码切换为200,返回就可以使用ajax中的成功回调进行工作,但是我想返回带有4xx和5xx状态码的自定义错误消息,以及如何使其正常工作。
看来IIS是问题所在,但是我该怎么做才能仍然允许错误返回类对象?
更新1:我还观看了Chrome中的“网络”标签,IIS根本没有返回有效负载,因此jQuery不会成为问题。
更新2:我的jquery ajax调用
$.ajax({
url: 'MyPage.aspx/myMethod',
data: JSON.stringify({ parameters: request }),
dataType: "json",
type: "POST",
contentType: "application/json; charset=utf-8",
success: function (data) {
...
},
error: function (data) {
// data.responseJSON is undefined and data.responseText contains only HTTP status code text, like "Bad Request" when code was 400.
}
});
答案 0 :(得分:0)
确定在另一个stackoverflow帖子中找到了它。
解决方案是将以下内容添加到web.config:
<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" >
<clear/>
</httpErrors>
默认情况下,IIS将替换对错误的响应,此处的属性“ existingResponse = PassThrough”是关键。现在,responseJSON和responseText填充了由Web方法返回的我的自定义内容。
在HttpResponseMessage content lost when HTTP Status is Bad Request中找到