【问题标题】:Prevent IIS 7.5 from displaying default error pages using the web.config使用 web.config 防止 IIS 7.5 显示默认错误页面
【发布时间】:2011-10-04 09:23:29
【问题描述】:

我正在尝试将自定义错误页面添加到我的 Web 应用程序。到目前为止,我已将此添加到我的 web.config 文件中的元素下:

<customErrors mode="On" >
    <error statusCode="404" redirect="~/404.aspx"/>
    <error statusCode="500" redirect="~/500.aspx"/>
</customErrors>

这适用于 .NET 涉及的错误,例如包含 .aspx 扩展名的 url。但是,我还希望为诸如 www.example.com/dasda 之类的 url 显示自定义错误

目前,当我请求诸如上述 IIS 7.5 之类的页面时,会显示它自己的错误消息。我在元素下添加了这个:

<httpErrors >
    <remove statusCode="404" subStatusCode="-1" />
    <error statusCode="404" path="~/404.aspx" responseMode="ExecuteURL"  />
    <remove statusCode="500" subStatusCode="-1" />
    <error statusCode="500" path="~/500.aspx" responseMode="ExecuteURL" />
</httpErrors>

我认为这会使 IIS 显示自定义错误页面,而不是默认页面,但事实并非如此。

我知道我可以在 IIS 本身中设置自定义错误页面,但我的情况的理想解决方案是在 web.config 中进行配置。

我已尝试按照here 的建议将其添加到 Page_Load 事件的自定义错误页面中:

            Response.TrySkipIisCustomErrors = true;

但是,它并没有阻止默认 IIS 页面代替我的自定义错误页面显示。我也试过here的建议:

<httpErrors >
    <remove statusCode="404" subStatusCode='-1' />
    <error statusCode="404" path="~/404.aspx" prefixLanguageFilePath='' responseMode="Redirect"  />
    <remove statusCode="500" subStatusCode='-1' />
    <error statusCode="500" path="~/500.aspx" prefixLanguageFilePath='' responseMode="Redirect" />
  </httpErrors>

但这也没有奏效。

那么有没有办法通过在 web.config 文件中配置设置来防止 IIS 显示默认错误页面?

【问题讨论】:

    标签: c# web-applications webforms iis-7.5


    【解决方案1】:

    我遇到的问题是,默认情况下,errorMode 属性具有以下选项:DetailedLocalOnly、Custom 或Detailed。

    如果 errorMode 属性没有像我之前那样指定,那么它默认为DetailedLocalOnly (ref)。这意味着我不会看到显示的自定义错误。

    有效的配置设置是:

    <httpErrors errorMode="Custom">
        <remove statusCode="404" subStatusCode='-1' />
        <remove statusCode="500" subStatusCode='-1' />
        <error statusCode="404" path="/404.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL"  />
        <error statusCode="500" path="/500.aspx" prefixLanguageFilePath="" responseMode="ExecuteURL" />
      </httpErrors>
    

    errorMode="Custom" 可以方便地测试自定义页面是否正常工作,但如果将其省略或显式设置为 errorMode="DetailedLocalOnly" 以进行调试,则可能更方便。

    【讨论】:

    • 感谢 Aesir 发布此内容。我能够用你的例子解决同样的问题。
    • 感谢您发现 errorMode 标志;缺乏效果让我很恼火。
    【解决方案2】:

    我认为您需要强制 IIS 对用户请求的任何资源使用 CustomErrorModule。 尝试将以下内容添加到您的网络配置中

     <modules>
          <add name="CustomErrorModule" type="customErrorModule" preCondition="" />
     </modules>
    

    也可以看看下面的链接

    https://serverfault.com/questions/53712/in-iis-7-how-do-i-set-up-a-default-error-document-for-any-error

    【讨论】:

    • 谢谢,这应该添加到 web.config 的哪个部分?我尝试将它放在 httpModules 和模块部分,但都没有成功。
    • 谢谢你的更新,但它仍然没有工作。我已经设法让它工作了。
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多