2015-11-10 89 views
0
protected void Application_Error(object sender, EventArgs e)  
{ 
     Exception ex = this.Server.GetLastError(); 
     this.Server.ClearError();  
     string errorMessage = ex.Message; 
     logger.Error(errorMessage, ex);  
     Response.Redirect("~/Error.aspx"); 
} 
+0

你可以在asp.net中使用session,這是我能想到的最簡單的方法 –

+0

嘗試使用查詢字符串,傳遞錯誤代碼。 – User2012384

+1

在這種情況下,我寧願會話。然後,您可以保留完整的異常,包括堆棧跟蹤以進一步處理。 –

回答

0

在這種情況下,我寧願會議。然後,您可以保留完整的異常,包括堆棧跟蹤以進一步處理。但您無法直接在Application_Error中訪問會話。這應該工作:

private void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = this.Server.GetLastError(); 
    // ... 
    HttpApplication application = (HttpApplication)sender; 
    HttpContext context = application.Context; 
    context.Session["LastError"] = ex; 
    Response.Redirect("~/Error.aspx"); 
} 

現在,您可以訪問例外Error.aspx這樣:

protected void Page_Load(Object sender, EventArgs e) 
{ 
    Exception ex = (Exception)Session["LastError"]; 
} 
+0

有沒有必要重定向頁面?我怎樣才能檢索另一頁上的消息? – ashT

+0

@ashT:但我已重定向 –

0

我認爲你可以使用Server.TransferGlobal.asax

void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs 

        //direct user to error page 
        Server.Transfer("~/Error_Pages/ErrorPage500.aspx"); 
    } 

而在你的錯誤頁面,您可以得到內部異常來檢查實際發生的異常:

protected void Page_Load(object sender, EventArgs e) 
    { 
       LoadError(Server.GetLastError()); 
    } 

protected void LoadError(Exception objError) 
    { 
       Exception innerException = null;   
       if (objError != null) 
       { 
        if (objError.InnerException != null) 
        { 
         innerException = objError.InnerException; 
        } 
       } 
} 
相關問題