2

我使用 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 的最后一个错误是“找不到页面 'foo.aspx'”。

我需要做什么才能使其正常工作?

4

2 回答 2

5

在 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");
于 2009-07-14T19:38:34.617 回答
0

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

将这些条目之一的名称更改为 GlobalErrorX.aspx,看看会发生什么。

于 2009-07-14T19:35:20.113 回答