ASP.NET错误处理的两种方案_AX

网页出错,在所难免,如何处理,方案任选.

一般页面出错后,我们的处理方法一般分为三步:业务逻辑→写入日志→跳转到默认页或指定页

 

【方案一】

1.在web.config添加一个节点,指定跳转到的默认页.mode为RemoteOnly表示本地报黄页,其它用户跳转.

< system.web >
    
< customErrors  mode ="On"  defaultRedirect ="default.aspx" >             
    
</ customErrors >
</ system.web >

 

2.在Global.asax中添加错误处理

     void  Application_Error( object  sender, EventArgs e) 
    { 
        
// 在出现未处理的错误时运行的代码
        
// 业务处理
        
// 写日志,下面是一个例子,建议使用第三方控件Log4Net
         try
        {
            
using  (System.IO.StreamWriter sw  =  System.IO.File.AppendText( " D:\\AX.txt " ))
            {
                sw.WriteLine(Server.GetLastError().InnerException.Message);
                sw.WriteLine(Server.GetLastError().InnerException.StackTrace);
                sw.Flush();
            }
        }
        
catch  (Exception)
        {
        }
    }

 

3.如果某个Page出错后需要跳转到指定页,重写Page的AddParsedSubObject方法,

以保证页面加载最开始为Errorpage属性赋值,其属性依赖于第一步中的mode="On",

不确定mode为RemoteOnly是否可以

(跳转页后面会带系统默认的参数aspxerrorpath=...)

懒人可以写在Page_Load方法的第一句话中,该方法之前出错将会使用第二步中的处理方式.我是懒人...

     protected   override   void  AddParsedSubObject( object  obj)
    {
        ErrorPage 
=   " Log4Net.aspx " ;
        
base .AddParsedSubObject(obj);
    }

【追加】还可以在页面前端加Attribute:ErrorPage

 

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " OnErrorTest.aspx.cs "  Inherits = " OnErrorTest "  ErrorPage = " ~/AX.aspx "   %>

 

【方案二】

1.在Global.asax中添加错误处理,并指定默认页.

     void  Application_Error( object  sender, EventArgs e) 
    { 
        
// 在出现未处理的错误时运行的代码
        
// 业务处理
        
// 写日志,下面是一个例子,建议使用第三方控件Log4Net
         try
        {
            
using  (System.IO.StreamWriter sw  =  System.IO.File.AppendText( " D:\\AX.txt " ))
            {
                
// Server.GetLastError().InnerException.ToString()是异常的详细内容
                sw.WriteLine(Server.GetLastError().InnerException.ToString());
                sw.Flush();
            }
        }
        
finally
        {
            
// 跳转到默认页
            Server.Transfer( " Default.aspx " );
        }
    }

 

2.如果某个Page出错后需要跳转到指定页

     void  Page_Error( object  sender, EventArgs e)
    {   
        
// 业务处理
        
// 写日志
        
// 跳转到指定页
        
// Server.Transfer("Log4Net.aspx");
        
//
        
// Response.Redirect("Log4Net.aspx");

        
// 清除错误,如果执行了上面的跳转页,将永远不会执行到这句话
        
// 如果不清除,就会执行Global.asax的Application_Error()方法
        
// Server.ClearError();
    }

 

推荐使用方案一,因为可以在web.config修改跳转的默认值

 

你可能感兴趣的:(ASP.NET错误处理的两种方案_AX)