在
Asp.net
开发过程中,我们会遇到很多
Exception
,不处理这些
Exception
的话会出现很难看的页面。
还有一些我们未预料到的
Exception
,当发生
Exception
时,我们也必须进行记录具体位置,以便我们修正错误。
asp.net
异常处理的位置大概有以下
3
个地方
1.
程序的代码段中,这是最直接处理异常的地方。如下
try
{
n=Convert.ToInt32(info);
}
catch(Exception)
{
}
只是最基本处理异常的地方。
2. ASP.NET
的中的
Application_Error
中
.Application_Error
事件。对于应用程序中引发的任何未处理异常都会引发此事件。一般我们处理如下
protected void Application_Error(Object sender, EventArgs e)
{
Exception exp=Server.GetLastError();
string strE="
内部错误
:"+ exp.InnerException.ToString()+"/r/n
堆栈:
"+ exp.StackTrace+"/r "+"Message:"+exp.Message+"/r
来源
:"+exp.Source;
// 在事件日志中记录异常信息
Log(strE);
Server.ClearError();
Server.Transfer("Error.aspx",false);
}
这样我们就可以处理
Server
端出现的错误。我们记录出错的源头。
3.
也可以在页级别或者应用程序级别处理代码错误。
Page
基类公开了一个
Page_Error
方法,此方法在页中可以被重写。每当运行时引发未捕获的异常时都调用此方法。
void Page_Error(Object source, EventArgs e) {
String message = "<font face=verdana color=red>"
+ "<h4>" + Request.Url.ToString() + "</h4>"
+ "<pre><font color='red'>"
+ Server.GetLastError().ToString() + "</pre>"
+ "</font>";
Response.Write(message);
}
下面我讲述一下怎么在
ASP.NET
程序里面统一的处理异常,我们以最常见的
Session
过期为例
我们先写一个
Session
过期的异常
public class YSessionException:Exception
{
}
我们再定义一个属性
public int SessionValue
{
get{ if(Session["SessionValue"]==null)
{
throw new YSessionException("");
}
}
}
下面我们在
Page_Error
或者
Application_Error
中处理这个异常
{
Exception exp=Server.GetLastError();
if(exp is YSessionException)
{
..................
}
Server.ClearError();
Server.Transfer("Error.aspx",false);
}
这样就可以为我们程序提供很好的
Exception
处理界面。