12

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

这被完全忽略

  <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 配置,所以我会有任何东西。

4

3 回答 3

14

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

  Response.TrySkipIisCustomErrors = true;

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

于 2010-07-18T12:55:07.760 回答
11

而不是使用:

Response.TrySkipIisCustomErrors = true;

在 Web.config 中使用它:

<httpErrors errorMode="Custom" existingResponse="Replace">
于 2012-10-02T12:18:06.330 回答
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 自定义错误页面。

于 2013-06-26T15:22:38.637 回答