.NET异常处理 (二)

上一篇说的是通过try{}catch{}的方法,基本是在方法内部的处理,但是,我们通常需要一个更加通用的、跟底层

的错误处理方法。于是,我们想到了下面几种方式!

1:自定义错误页面,在web.config 中配置,但系统有错误是,跳转到该页面,通常页面中提示“系统错误!重新登陆!”的信息。

     优点: 这种方式可以给用户提供友好的错误提示;配置简单;

     缺点:错误信息粒度过粗,不知道错误内容和类型;

     配置方法:

     Add the following code to the <customErrors> section to redirect the user to a custom page

     

< customErrors defaultRedirect = " http://hostName/applicationName/errorStatus.htm "  mode = " On " >
</ customErrors >

 

2:通过基类来捕获异常

     大家都知道,Page页面的生命周期,我们可以重写page 中的 Page_Error  事件,来达到捕获异常的目的。

     代码如下:

     

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();
}

     优点:通过这种方法,系统可以获取到任何异常,并且可以得到异常的详细信息!

     缺点:系统资源消耗大(相对),每个页面都需要继承基类。

 

3:Application_Error 处理异常

     这种处理异常的方式,可以吧异常信息写入系统的 错误日志

     

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

 

4:自定义错误页面 与 详细错误信息共同处理的方式

     上面三种方式各有特点,我们可以选择适合自己的处理方式。我通常采用的是 自定义错误页面 与 详细错误信息共同处理的方式。

     在web.config中配置一个自定义的错误页面,并在这个页面显示详细错误信息,也可以在后台把这些错误信息写入日志或者数据库。

 

 

转载于:https://www.cnblogs.com/duhui-cnblogs/articles/1287368.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值