我在global.asx
的Application_Error子中查找HttpExceptionsSub 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,但它显示的只是一个空白页。
答案 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
。