2015-11-10 64 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; 
        } 
       } 
} 
相关问题