Application_Error中的Server.Transfer(“error_404.aspx”)返回一个空白页面

时间:2010-03-27 02:43:48

标签: asp.net global-asax http-status-codes httpexception application-error

我在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”),以及Page_Load of error_404.aspx,但它显示的只是一个空白页。

3 个答案:

答案 0 :(得分:4)

您是否正在清除响应缓冲区?你不知道已经存在的是什么,因为你在Application_Error catch-all中这样做了。 Server.Transfer只是将新页面生成的内容附加到现有的Response上。显然这可能会产生一些问题。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

Server.Transfer对此不是一个好方法。试试Response.Redirect。它应该工作。

如果您有任何例外,是否有维持州的要求?如果没有,请使用Response.Redirect