2009-07-14 137 views
1

我使用Application_Error事件来捕获和记录我的应用程序中的错误。记录错误,则显示一个友好的错误屏幕:ASP.NET应用程序错误覆盖404?

在我的web.config我有:

<customErrors mode="On" defaultRedirect="GlobalError.aspx"> 
    <error statusCode="404" redirect="PageNotFound.aspx" /> 
</customErrors> 

每当用户尝试加载一个不存在的页面时,他们获取GlobalError.aspx页面,而不是PageNotFound.aspx页面。我查看了Application_Error事件,发现响应状态码是200,而服务器的最后一个错误是“Page'foo.aspx'未找到。”

我需要做些什么才能正确工作?

回答

3

在Application_Error函数中,如果错误不是找不到页面/ 404错误,则应该只Server.Transfer。在这些情况下,将它留给ASP.NET来使用web.config中的设置进行重定向。

你可以弄清楚如果使用下面的是一个404:

Exception ex = Server.GetLastError(); 
if (ex.GetType() == typeof(HttpException)) 
{ 
    HttpException httpEx = (HttpException)ex; 
    if(httpEx.GetHttpCode() == 404) { 
    return; 
    } 
} 
Server.Transfer("~/error.aspx"); 
0

首先,你必须决定他们为什么得到GlobalError.aspx。你向我们展示了两种可能性;也许还有更多。

将其中一个条目的名称更改为GlobalErrorX.aspx,看看会发生什么。

+0

当我删除了defaulRedirect,这必将推动用户在同一个地方。显然这个文件的两个引用是多余的。 – 2009-07-14 19:40:10

+0

我刚刚意识到404可能意味着它无法找到错误页面。检查IIS日志。 – 2009-07-14 19:50:52