2

我在 global.asx 的 Application_Error 子中查找 HttpExceptions

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)

        Dim ex As Exception = HttpContext.Current.Server.GetLastError()

        If ex IsNot Nothing Then
            If TypeOf (ex) Is HttpUnhandledException Then
                If ex.InnerException Is Nothing Then
                    Server.Transfer("error.aspx", False)
                End If
                ex = ex.InnerException
            End If

            If TypeOf (ex) Is HttpException Then
                Dim httpCode As Integer = CType(ex, HttpException).GetHttpCode()
                If httpCode = 404 Then
                    Server.ClearError()
                    Server.Transfer("error_404.aspx", False)
                End If
            End If
        End If
End Sub

我可以单步执行此代码并确认它确实命中了 Server.Transfer("error_404.aspx") 以及 error_404.aspx 的 Page_Load,但它显示的只是一个空白页面。

4

3 回答 3

4

您是否正在清除响应缓冲区?您不知道已经存在什么,因为您在 Application_Error 包罗万象中执行此操作。Server.Transfer 只是将新页面生成的任何内容附加到现有响应中。显然,这可能会产生一些问题。

于 2010-03-28T01:39:56.420 回答
0

如果您将其更改Server.Transfer为 a是否有效Response.Redirect?(您可能必须使用您在 global.asax 中的 HTTPContext.Current 前缀。)

我不确定 Server.Transfer 在您正在做的事情的上下文中是一个好主意,因为您实际上是在要求 IIS 将 global.asax URL 呈现给浏览器。

于 2010-03-27T02:51:17.660 回答
0

我认为如果发生一些错误,Server.Transfer 不会触发。

Server.Transfer不是一个好的方法。尝试使用Response.Redirect。它应该工作。

如果您有任何例外,是否有任何维护状态的要求?如果没有,请与Response.Redirect.

于 2010-03-27T03:55:45.227 回答