我有一个C#web表单ASP.NET 4.0 Web应用程序使用Routing for URL由于某种原因,我的web.config的system.web部分中定义的自定义错误被完全忽略,它将回退IIS错误。< / p>
这完全被忽略了
<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配置,所以我会有任何建议。
答案 0 :(得分:14)
要禁用您必须设置的IIS错误消息
Response.TrySkipIisCustomErrors = true;
在您的错误页面中。之后,您的错误消息应显示没有问题。
答案 1 :(得分:10)
而不是使用:
Response.TrySkipIisCustomErrors = true;
在Web.config中使用它:
<httpErrors errorMode="Custom" existingResponse="Replace">
答案 2 :(得分: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自定义错误页面。