ASP.NET:当 http 状态为 4xx 时,Webmethos 不会 return 负载

ASP.NET: Webmethos does not return payload when http status is 4xx

我有以下代码:

[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;
}

运行 这与 jQuery.ajax 使用 url MyPage。aspx/myMethod 此调用不会 return 来自 MyResponse 对象的有效载荷。一旦我将状态代码切换为 200,return 就可以使用 ajax 中的成功回调进行工作,但我想 return 自定义带有 4xx 和 5xx 状态代码的错误消息,如何使其工作。

看来 IIS 是问题所在,但我需要做什么才能让 returning 我的 class 对象出错?

更新 1: 我也在 chrome 中查看了网络选项卡,IIS 根本没有 return 负载,所以 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.
  }
});

好的,在另一个 Whosebug 中找到了它 post。

解决方案是将以下内容添加到 web.config:

<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough" >
  <clear/>
</httpErrors>

默认情况下 IIS 正在替换错误响应,这里属性 "existingResponse=PassThrough" 是关键。现在 responseJSON 和 responseText 填充了我通过 web 方法返回的自定义内容。

发现于