使用web.config防止IIS 7.5显示默认错误页面

本文关键字:默认 显示 错误 web config 防止 IIS 使用 | 更新日期: 2023-09-27 18:02:02

我正在尝试添加自定义错误页面到我的web应用程序。到目前为止,我已经把它添加到我的网站。元素下的配置文件:

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

这可以很好地处理。net触及的错误,例如包含.aspx扩展名的url。但是,我也希望自定义错误显示的url,如www.example.com/dasda

目前,当我请求一个页面,如上述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中进行配置。

我已经尝试将此添加到Page_Load事件上的自定义错误页面中,如下所示:

            Response.TrySkipIisCustomErrors = true;

但是,它并没有阻止默认的IIS页面显示在我的自定义错误页面的位置。我也试过这里的建议:

<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中配置设置来阻止IIS显示默认的错误页面呢?配置文件?

使用web.config防止IIS 7.5显示默认错误页面

我遇到的问题是,默认情况下有一个带有以下选项的属性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"用于调试,则可能更方便。

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

 <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

如果您有来自服务器的JSON响应,通过设置existingResponse="PassThrough",您指示IIS通过HTTP错误响应而不处理它。这允许您的服务器的JSON响应被直接发送到客户端。

</system.webServer>   
    <!-- Avoid showing the default IIS error pages and display JSON response -->
    <httpErrors existingResponse="PassThrough" />
</system.webServer>