我使用Application_Error事件来捕获并记录我的应用程序中的错误。记录错误,然后显示友好的错误屏幕:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ex As New Exception( _
String.Format("Error on page: '{0}'.", HttpContext.Current.Request.Url), _
Server.GetLastError())
Dim uid As Guid = Log.FatalError(ex)
Server.Transfer(String.Concat("~\\GlobalError.aspx?error=", uid))
End Sub
在我的web.config中,我有:
<customErrors mode="On" defaultRedirect="GlobalError.aspx">
<error statusCode="404" redirect="PageNotFound.aspx" />
</customErrors>
每当用户尝试加载不存在的页面时,它们都会获得GlobalError.aspx页面,而不是PageNotFound.aspx页面。我查看了Application_Error事件,发现Response StatusCode为200,而Server的最后一个错误是找不到“Page'foo.aspx”。
要使其正常工作,我需要做些什么?
答案 0 :(得分:4)
在Application_Error函数中,如果错误不是找不到页面/ 404错误,则应该只有Server.Transfer。在这些情况下,请使用web.config中的设置将其留给ASP.NET进行重定向。
您可以使用以下内容确定它是否为404:
Exception ex = Server.GetLastError();
if (ex.GetType() == typeof(HttpException))
{
HttpException httpEx = (HttpException)ex;
if(httpEx.GetHttpCode() == 404) {
return;
}
}
Server.Transfer("~/error.aspx");
答案 1 :(得分:0)
首先,您必须决定他们为何获得GlobalError.aspx。你向我们展示了两种可能性;也许还有更多。
将其中一个条目的名称更改为GlobalErrorX.aspx,看看会发生什么。