0

我有一些我想向用户显示的自定义错误消息。因此,当他们说输入错误的用户名/密码组合时,我可能会在我的代码中这样做:

Response.StatusCode = 400;
return Json("Invalid username or password");

这在我的本地机器上运行良好。我一直在部署到一个网络主机,这些消息被服务器覆盖,所以它们都显示为:

由于发生内部服务器错误,无法显示该页面。

服务器显然是在试图保护我免于泄露有关出了什么问题的敏感信息,但我确实希望这个错误能够通过并被用户看到(真的,由我的代码解析然后显示)。

我认为 web.config 中有一些东西可以让我完成这项工作,但到目前为止我尝试过的一切都没有奏效。有任何想法吗?

我现在拥有的 web.config 的相关部分:

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="PassThrough">
    </httpErrors>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    etc.
4

3 回答 3

2

默认情况下,一些 HTTP 状态代码被 IIS 隐藏并被它替换。但是,可以使用以下行进行配置:

  <system.webServer>
    <httpErrors errorMode="Detailed"/>

这将允许您在响应中传递您的自定义消息,并在 AJAX 调用完成时在客户端读取它。

于 2013-03-23T05:14:05.080 回答
0

为了处理每个 Http 错误代码,您需要在 web.config 文件中添加特定的映射

 <customErrors mode="On/RemoteOnly" >
      <error statusCode="400" redirect="My400View" />
      <error statusCode="404" redirect="My404iew" />
      <error statusCode="500" redirect="My500View" />
    </customErrors>
于 2013-03-22T23:21:09.183 回答
0

最终的解决方案是从 web.config 中完全删除 < httpErrors > 元素。即使将其设置为此处看到的默认选项http://www.iis.net/configreference/system.webserver/httperrors也不起作用,所以我有点困惑为什么删除它会起作用。

<system.webServer>
    **Remove <httpErrors> !**
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
于 2013-03-23T15:31:54.007 回答