您的位置:首页 > 编程语言 > ASP

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

2008-08-05 17:38 666 查看
网页出错,在所难免,如何处理,方案任选.

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

【方案一】

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修改跳转的默认值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: