IIS7上托管的ASP.NET应用程序忽略了自定义错误并回退到IIS错误

时间:2010-07-02 14:20:23

标签: asp.net iis-7 routing custom-errors

我有一个C#web表单ASP.NET 4.0 Web应用程序使用Routing for URL由于某种原因,我的web.config的system.web部分中定义的自定义错误被完全忽略,它将回退IIS错误。< / p>

这完全被忽略了

  <system.web>
    <customErrors mode="On">
      <error statusCode="500" redirect="~/Error" />
      <error statusCode="404" redirect="~/404" />
      <error statusCode="403" redirect="~/Error" />
    </customErrors>
  </system.web>

这部分接管

  <system.webServer>
    <httpErrors>
      <!--<clear />-->
      <remove statusCode="500" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <error statusCode="404" subStatusCode="-1" path="/App1/404" responseMode="Redirect" />
      <error statusCode="500" prefixLanguageFilePath="" path="/App1/Error" responseMode="Redirect" />
    </httpErrors>
  </system.webServer>

这将是一个小小的不便,除了它回归到IIS本机而不是我的应用程序它完全绕过Elmah正确记录我的404异常。

编辑:为了避免任何此类建议,我只在customErrors停止工作后添加了httpErrors配置,所以我会有任何建议。

3 个答案:

答案 0 :(得分:14)

要禁用您必须设置的IIS错误消息

  Response.TrySkipIisCustomErrors = true;

在您的错误页面中。之后,您的错误消息应显示没有问题。

答案 1 :(得分:10)

而不是使用:

Response.TrySkipIisCustomErrors = true;

在Web.config中使用它:

<httpErrors errorMode="Custom" existingResponse="Replace">

答案 2 :(得分:3)

您可以通过两种方式传递IIS7默认错误消息 一种是设置response.TrySkipIisCustomErrors = true

response.TrySkipIisCustomErrors = true;
response.Status = response.Status;

出于某种原因,如果您没有设置response.Status,则不会接受TrySkipIisCustomErrors。

另一种方法是在web.config

中将existingResponse设置为“PassThrough”
<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

但是这将忽略所有设置的IIS自定义错误页面。