ASP.NET 应用程序未处理异常的错误页面
每个应用程序都需要向用户显示友好的错误消息,以及异常详情和开发者所需的堆栈跟踪。 在本文中,我将展示如何显示用户友好的错误消息。
引言
每个应用程序都需要在出现问题时显示友好的消息,以及异常详情和开发者所需的堆栈跟踪。 在本文中,我将展示如何显示用户友好的错误消息。
解决方案
有很多组成部分,并且很容易将它们组合在一起。 以下是组成部分:
Message
类:它存储你需要向开发者显示的消息详情。- Global.asax:捕获未处理的错误;对于每个未处理的异常,都会触发
Application_Error
事件。 - 错误页面:用于向用户显示错误。
- Web.config:最后但并非最不重要的一点,是将异常重定向到错误页面的设置。
Message
类是最简单的步骤;创建一个 Message
类,并添加 LastException
作为静态属性。 我稍后会在解释多线程问题时再讨论静态属性。 在 Global.asax 中,在 Application_Error
事件中,编写以下代码:
Message.LastException = Server.GetLastError().GetBaseException();
string message = "Error Caught in Application_Error event\n" +
"Error in: " + Request.Url.ToString() +
"\nError Message:" + Message.LastException.Message.ToString() +
"\nStack Trace:" + Message.LastException.StackTrace.ToString();
第一行获取最后一个异常并将其保存在 Message
类的 LastException
属性中。 错误页面非常简单,包含一个链接以显示对开发者有用的消息详情。 项目代码已附上,请下载代码进行测试。 这是包含在超链接单击事件中的代码片段:
if (this.MessagePanel.Visible)
{
this.MessagePanel.Visible = false;
this.DetailLinkButton.Text = "Show Details";
}
else
{
if (Message.LastException != null)
{
this.MessageTextBox.Text = "Error Caught in Application_Error event\n" +
"Error in: " + Request.Url.ToString() +
"\n\nError Message:" + Message.LastException.Message.ToString() +
"\n\nStack Trace:" + Message.LastException.StackTrace.ToString();
}
else
{
//this should never happen.
this.MessageTextBox.Text = "There is no exception.";
}
this.MessagePanel.Visible = true;
this.DetailLinkButton.Text = "Hide Details";
}
以上代码非常简单,并在文本框中显示异常详情。 Web.config:这是每个人都知道的事情,重定向到错误页面。
<customErrors mode="On" defaultRedirect="showError.aspx">
</customErrors>
将上述配置添加到 web.config 文件的 system.web
部分。
就这样,你的应用程序已准备好处理异常。 哦,关于多用户、线程问题。 由于 Message
类具有此静态属性,因此异常详情可能不正确。 可以通过同步来解决此问题,但除非你有数千个并发用户,否则你可能不需要它。
结论
我只是解释了一种显示异常的方法,还有数百万种其他方法可以做到同样的事情。
祝您编码愉快!