【问题标题】:Custom 404 errors using Global.asax file not always working使用 Global.asax 文件的自定义 404 错误并不总是有效
【发布时间】:2015-06-24 10:40:40
【问题描述】:

我们目前使用配置文件来抛出 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 - 此页面不存在)。尝试调试它,Global.asax 文件中的Application_Error 中的断点永远不会命中。

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多