自定义400,邮件被覆盖

时间:2013-03-22 22:44:51

标签: asp.net-mvc asp.net-mvc-4 iis-7

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

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

这在我的本地计算机上运行正常。我一直在部署到一个Web主机,这些消息被服务器覆盖,以便它们全部出现:

  

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

服务器显然试图保护我不会泄露有关出错的敏感信息,但我确实希望这个错误能够通过并被用户看到(实际上,我的代码解析然后显示)。

我认为web.config中有一些东西我可以做这个工作,但到目前为止我尝试的一切都没有用。有什么想法吗?

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

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

3 个答案:

答案 0 :(得分:2)

默认情况下,IIS会将某些HTTP状态代码隐藏起来并替换为它。但是,可以使用以下行进行配置:

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

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

答案 1 :(得分:0)

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

 <customErrors mode="On/RemoteOnly" >
      <error statusCode="400" redirect="My400View" />
      <error statusCode="404" redirect="My404iew" />
      <error statusCode="500" redirect="My500View" />
    </customErrors>

答案 2 :(得分:0)

对此的解决方案最终取消了&lt; httpErrors&gt;完全来自web.config的元素。即使将其设置为默认选项(如http://www.iis.net/configreference/system.webserver/httperrors所示)也不起作用,因此我有点困惑为什么删除它有效。

<system.webServer>
    **Remove <httpErrors> !**
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>