ASP.NET创建自定义错误报告

来源:互联网 发布:安东尼体测数据 编辑:程序博客网 时间:2024/05/21 09:47

  ASP.NET创建自定义错误报告有三种方式,分别是:Page_Error 、Application_Error 、配置Web.config

 

一、使用Page_Error事件

Page_Error 事件提供一种捕获在页级别出现的错误的方法。您可以只是显示错误信息,也可以记录事件或执行某个其他操作。
向应用程序的最终用户显示详细信息(尤其是该应用程序在 Internet 上运行时)一定要小心。更适当的做法是向用户显示一条消息,告知已发生错误,然后将具体的错误详细信息记录在事件日志中。

void Page_Load(object sender, System.EventArgs e)
{
throw(new ArgumentNullException());
}

public void Page_Error(object sender,EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "<b>Error Caught in Page_Error event</b><hr><br>" + 
                "<br><b>Error in:</b>" + Request.Url.ToString() +
                "<br><b>Error Message:</b>" + objErr.Message.ToString()+
                "<br><b>Stack Trace:</b><br>" +
                  objErr.StackTrace.ToString();
                  Response.Write(err.ToString());
                  Server.ClearError();// 防止错误继续被Application_Error 事件处理
}

 

二、使用 Application_Error 事件

Application_Error 事件是在Global.asax 文件中指定的。

Page_Error 事件相类似,您可使用 Application_Error 事件捕获发生在应用程序中的错误。由于事件发生在整个应用程序范围内,因此您可记录应用程序的错误信息或处理其他可能发生的应用程序级别的错误。

下面是创建一个要在其中引发异常的新页,捕获 Global.asax 文件的 Application_Error 事件中的错误,并将该错误写入事件日志中

using System.Diagnostics;

protected void Application_Error(object sender, EventArgs e)
{
Exception objErr = Server.GetLastError().GetBaseException();
string err = "Error Caught in Application_Error event/n" +
                  "Error in:" + Request.Url.ToString() +
                  "/nError Message:"+ objErr.Message.ToString() + 
                  "/nStack Trace:"+ objErr.StackTrace.ToString();
                  EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
                  Server.ClearError();
                  //additional actions...
}

 

三、使用 Web.config 文件

如果您不调用 Server.ClearError 或者捕获 Page_Error Application_Error 事件中的错误,则将根据 Web.config 文件的 <customErrors> 部分中的设置处理错误。在 <customErrors> 部分,可将重定向页指定为默认的错误页 (defaultRedirect) 或者根据引发的 HTTP 错误代码指定特定页。可使用此方法自定义用户收到的错误信息。

如果发生在应用程序以前的任一级别都未捕获到的错误,则显示这个自定义页。下面说明如何修改 Global.asax 文件,以便从不调用 Server.ClearError。因此,错误在作为捕获错误的最后一点的 Web.config 文件中进行处理。

 

<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>

 

备注:在 <customErrors> 部分的 defaultRedirect 中指定的页是一个 .htm 文件。如果您打算在 .aspx 页中使用 GetLastError (正如 Page_Error Application_Error 示例那样),则在进行重定向之前,必须将异常存储在会话变量或某个其他方法中。

请注意,<customErrors> 部分包括设置为 On mode 属性。mode 属性用于控制错误重定向发生的方式。例如,如果您正开发应用程序,则很可能希望查看实际的 ASP.NET 错误信息,并且不希望被重定向到更用户友好的错误页。mode 属性包括以下设置:

On:未被处理的异常将用户重定向到指定的 defaultRedirect 页。此模式主要用于生产。
Off:用户收到异常信息而不是被重定向到 defaultRedirect 页。此模式主要用于开发。
RemoteOnly:只有在本地计算机上访问该站点的用户(通过使用 localhost)才能收到异常信息。所有其他用户都被重定向到 defaultRedirect 页。此模式主要用于调试。