2015-04-17 63 views
1

我们目前使用配置文件来抛出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文件添加的StatusCode检查中的Application_Error。

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正常工作,以便在您转到不存在的页面时也会调用它。

回答

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

+0

这是一种我所看到的行为,但如何将定制的处理程序设置? – Lex

+0

我认为这应该有所帮助:https://technet.microsoft.com/en-us/library/cc753103%28v=ws.10%29.aspx –