在asp.net中发生异常时重定向到错误页面?

时间:2011-04-18 03:11:10

标签: asp.net vb.net exception exception-handling

我想在发生异常时重定向到错误页面。

如果代码未在页面中处理try{}catch(Exception ex){},并且在Web应用程序中发生错误。然后我想将带有异常详细信息的Error.aspx重定向到diplay。

我已经在Global.asax页面中编写了这样的代码。

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
    ' Code that runs when an unhandled error occurs
    Dim str As String = CType(sender, HttpApplication).Context.Request.Url.ToString
    Helper.ApplicationErrorHandler()
End Sub

Public Shared Sub ApplicationErrorHandler()
    Dim ex As Exception

    ex = HttpContext.Current.Server.GetLastError

    Dim str As String = HttpContext.Current.Request.Url.ToString()

    ' filter out 404 responses 
    Dim httpException = TryCast(ex, HttpException)
    If httpException IsNot Nothing AndAlso httpException.GetHttpCode() = 404 Then
        Return
    End If


    If TypeOf ex Is HttpUnhandledException AndAlso ex.InnerException IsNot Nothing Then
        ex = ex.InnerException
    End If

    If (ex IsNot Nothing) Then

        Dim msg As String = String.Format("An unhandled exception occurred:{0}Message: {1}{0}{0} Stack Trace:{0}{2}", System.Environment.NewLine, ex.Message, ex.StackTrace)
        Utility.SendEMail("LaborDB@alixpartners.com", System.Configuration.ConfigurationManager.AppSettings("ErrorEmailRecipient"), msg, "Labor Error")

    End If
    HttpContext.Current.Session.Add("Error", ex.Message)
    HttpContext.Current.Server.Transfer("error.aspx")

End Sub

仍然只是在错误位置停止异常。它没有重定向到错误页面。

    Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   Labor.AttributeProcess.Page_Load(Object sender, EventArgs e) in C:\Source Trunk\Labor\Labor\AttributeProcess.aspx.vb:23
   System.Web.UI.Control.OnLoad(EventArgs e) +131
   System.Web.UI.Control.LoadRecursive() +65
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2427

如何处理?我希望在发生异常时重定向到错误页面,即使没有尝试.. catch句柄。

2 个答案:

答案 0 :(得分:2)

查看web.config中的customErrors Element。您可以使用它将您的网站配置为在发生异常时重定向到其他页面。

答案 1 :(得分:0)

Jakob Gade 建议的链接不再起作用了,所以如果有人像我一样再次遇到同样的问题,可以回答这个问题,将以下代码复制到global.asax中的Application_Error方法中:

// After Handle the error. Clear It
Server.ClearError();

// Clear rendered. Just if needed
Response.Clear();

// Finally redirect, transfer
Response.Redirect("~/ErrorViewer.aspx");