ASP.NET MVC 5 ajax错误statusText总是“错误”

时间:2018-01-04 13:09:23

标签: javascript jquery asp.net ajax asp.net-mvc

我在向ajax调用发送错误的自定义消息时遇到问题。我的控制器返回如下内容:

return new HttpStatusCodeResult(400, "My error!");

我的ajax代码如下所示:

error: function (xhr, httpStatusMessage) {
              console.log(xhr.statusText);
              console.log(httpStatusMessage);
}

问题是xhr.statusCode和httpStatusMessage始终是“错误”。我现在做错了什么? 我期待着“我的错误!”在xhr.statusText。

我正在使用ASP.NET MVC 5jquery-1.10.2

我的xhr输出是:

abort:ƒ ( statusText )
always:ƒ ()
complete:ƒ ()
done:ƒ ()
error:ƒ ()
fail:ƒ ()
getAllResponseHeaders:ƒ ()
getResponseHeader:ƒ ( key )
overrideMimeType:ƒ ( type )
pipe:ƒ ( /* fnDone, fnFail, fnProgress */ )
progress:ƒ ()
promise:ƒ ( obj )
readyState:4
responseText:"Bad Request"
setRequestHeader:ƒ ( name, value )
state:ƒ ()
status:400
statusCode:ƒ ( map )
statusText:"error"
success:ƒ ()
then:ƒ ( /* fnDone, fnFail, fnProgress */ )

我的Web.config httpErrors配置如下所示:

<httpErrors existingResponse="PassThrough" errorMode="Custom">
      <remove statusCode="404" />
      <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL" />
      <remove statusCode="403" />
      <error statusCode="403" path="/Error/Forbidden" responseMode="ExecuteURL" />
    </httpErrors>

然而,在我的开发环境中,responseText为空,statusText只是“错误”。

1 个答案:

答案 0 :(得分:4)

您需要在Web.Config文件中设置属性。

在github上引用this web page的用户,强调我的,

  

默认情况下,IIS将屏蔽您的错误代码并将其替换为默认错误。 “PassThrough”选项告诉IIS单独保留自定义错误并按原样呈现它们。

“错误请求”是状态码400的默认http error text

因此设置为documented hereoutlined here

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough"></httpErrors>
  </system.webServer>
</configuration>

请仔细阅读您的IIS版本文档,但存在许多微妙的版本差异。

修改

并不是特定于MVC,但它是我曾经解决过的(生产代码的一部分),以及似乎也有助于OP的东西:

Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
Response.ContentType = "text/plain";
Response.Write(new String('_', 513) + "my custom message");

根据IIS版本,可能需要也可能不需要此absurd minimum character limit thing。如果有人能够对这种未记录在案的行为有所了解,我也将不胜感激。