ASP.NET:当HTTP状态为4xx

时间:2018-10-15 15:42:14

标签: c# asp.net webmethod

我有以下代码:

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

1 个答案:

答案 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中找到