ASP .NET之Application_Error应用程序级异常处理
Application_Error在哪
建立一个空网站后,在根目录下右键-添加新项,搜索全局应用程序类(这里我选择C#,另一个是VB),如图所示
然后打开Global.asax,就会找到Application_Error这个方法,啦啦啦。
有关Global.asax
这个文件后缀为asax,是一个全局应用程序类,一个项目中可以没有,如果有,就只能有一个。
Application_Error怎么用
首先,啥也别问,先敲下如下代码
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
//捕获异常
Exception ex = Server.GetLastError().GetBaseException();
/******自定义处理*/
/****************/
//清除异常
Server.ClearError();
}
捕获异常
Exception ex = Server.GetLastError().GetBaseException();
没有这行,你将不知道是什么错误。
清除异常
Server.ClearError();
没有这行,你的网站依旧会报错,因为没有把异常清除。
自定义处理
在这里,就可以写你的各种各样的异常处理,例如:输出一条异常信息。
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
//捕获异常
Exception ex = Server.GetLastError().GetBaseException();
Response.Write("应用程序级的异常处理。<br/>" + ex.Message);
//清除异常
Server.ClearError();
}
用throw来抛出一条异常
throw new IndexOutOfRangeException();
运行结果是这样的
将异常写入日志
接下来,我们用一个高端一点的方法
void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码
//捕获异常
Exception ex = Server.GetLastError().GetBaseException();
//将异常写入日志
System.Diagnostics.EventLog log = new System.Diagnostics.EventLog();
log.Source = "应用程序级异常处理";
log.WriteEntry(ex.Message, System.Diagnostics.EventLogEntryType.Error);
//清除异常
Server.ClearError();
}
这样我们就可以做到把异常写入系统日志。
你以为这就结束了吗,如果你就只是这样,当你运行你的网站,网站依旧会报错(没有捕获到异常!!!)
怎么才能真正写入呢?
打开我们的config文件
然后我们找到<system.web></system.web>标签,在其中添加如下代码:
<customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
如图
这样当页面发生403、404错误的时候,我们就可以捕获到异常并写入日志文件中。
运行结果如图:
End