使用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显示默认的错误页面呢?配置文件?
我遇到的问题是,默认情况下有一个带有以下选项的属性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>