2012-12-12 92 views
1

我在asp.net中有web应用程序。 我必须实现自定义错误页面。 意味着发生任何错误(运行时)。 我必须显示errorpage.aspx 上的异常和堆栈跟踪,我应该从母版页还是页级处理以及如何处理。asp.net中的自定义错误页面

<customErrors mode="On" defaultRedirect="~/Error_Page.aspx"></customErrors> 
+1

如果您设置自定义错误关闭它只会显示你在ASP默认异常页面错误和堆栈跟踪。不知道这是否会为你做? – middelpat

+0

我必须写详细信息和关于ErrorPage.aspx上的错误的堆栈跟踪从用户的角度来看 – lax

回答

0

您可以使用Server.GetLastError访问错误;

var exception = Server.GetLastError(); 
    if (exception != null) 
    { 
     //Display Information here 
    } 

欲了解更多信息:HttpServerUtility.GetLastError Method

+0

是这种有效的方式..我必须在每个页面上面放置..应该我只处理主页上的任何错误.. – lax

4

您可以在Global.asax中处理:

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception ex = System.Web.HttpContext.Current.Error; 
    //Use here 
    System.Web.HttpContext.Current.ClearError(); 
    //Write custom error page in response 
    System.Web.HttpContext.Current.Response.Write(customErrorPageContent); 
    System.Web.HttpContext.Current.Response.StatusCode = 500; 
} 
1

使用Elmah DLL与漂亮的UI显示您的错误。您可以使用此DLL维护日志。

2

请不要使用重定向作为显示错误消息的手段,因为它会中断HTTP。如果发生错误,服务器返回适当的4xx或5xx响应,而不是301重定向到200 OK响应是有意义的。我不知道为什么Microsoft将此选项添加到ASP.NET的自定义错误页面功能,但幸运的是,您不需要使用它。

我建议使用IIS管理器为您生成web.config文件。至于处理错误,请打开您的Global.asax.cs文件并为Application_Error添加方法,然后从中调用Server.GetLastError()

+0

Dai我必须在ErrorPage.aspx上编写有关错误的详细信息和堆栈跟踪 – lax

1

在Global.asax

void Application_Error(object sender, EventArgs e) 
{  
    Session["error"] = Server.GetLastError().InnerException; 
} 
void Session_Start(object sender, EventArgs e) 
{  
    Session["error"] = null; 
} 

在Error_Page Page_Load事件

if (Session["error"] != null) 
{ 
    // You have the error, do what you want 
} 
+1

由于在触发Application_Error事件时Session对象不可用,因此无法使用。 – Arthur