使用Global.asax文件的自定义404错误并不总是有效

时间:2015-04-17 14:08:28

标签: c# asp.net webforms http-status-code-404 global-asax

我们目前使用配置文件抛出404错误页面,但我们希望将其移至Global.asax文件,因为我们希望能够使用多个404错误页面,具体取决于用户所在的位置在页面上。

我们目前的设置:

<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
</customErrors>

<httpErrors existingResponse="Replace" defaultResponseMode="Redirect" errorMode="Custom">
    <remove statusCode="404"/>
    <error statusCode="404" responseMode="Redirect" path="/PageNotFound.aspx"/>
</httpErrors>

我们在Global.asax文件的Application_Error中添加了statusCode检查。

if (statusCode == 404)
{
    Response.Redirect(String.Format("/PageNotFound.aspx"));
}

但是,当从配置文件中删除HttpErrors时,不会调用应用程序错误,除非我们在页面中专门抛出404错误代码。就像我们的新闻栏目一样,如果新闻文章不存在,我们会抛出404错误页面,并转到正确的错误页面(即http://[website].com/article?article=blah - 本文不存在)。

我尝试了各种各样的东西,但它总是显示IIS 404错误页面,而不是自定义的只是输入错误的页面名称(即http://[website].com/blah - 此页面不存在)。尝试调试它,Application_Error文件中的Global.asax中的断点永远不会被命中。

我们需要让Application_Errors正常工作,以便在您转到不存在的页面时调用它。

1 个答案:

答案 0 :(得分:1)

看看这个: https://msdn.microsoft.com/en-us/library/24395wz3%28v=vs.140%29.aspx#robustProgrammingToggle

它基本上说如果它不存在页面就不会捕获它。您必须在IIS中创建自定义处理程序。所以我认为这解释了为什么它没有进入Application_Error方法。

在IIS中设置自定义错误处理程序:https://technet.microsoft.com/en-us/library/cc753103%28v=ws.10%29.aspx