代码之家  ›  专栏  ›  技术社区  ›  Chris Marisic

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

  •  12
  • Chris Marisic  · 技术社区  · 14 年前

      <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配置,这样我就可以拥有任何东西。

    5 回复  |  直到 14 年前
        1
  •  14
  •   Michael A. Volz aka Flynn    14 年前

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

      Response.TrySkipIisCustomErrors = true;
    

        2
  •  11
  •   Lars B.    12 年前

    而不是使用:

    Response.TrySkipIisCustomErrors = true;
    

    在Web.config中使用:

    <httpErrors errorMode="Custom" existingResponse="Replace">
    
        3
  •  3
  •   Andrew Chaa    11 年前

    您可以通过两种方式传递IIS7默认错误消息 一种是设置response.tryskipiiscustomerros=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自定义错误页。