网页出错,在所难免,如何处理,方案任选. 一般页面出错后,我们的处理方法一般分为三步:业务逻辑→写入日志→跳转到默认页或指定页
【方案一】 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修改跳转的默认值 |
|
来自: 悟静 > 《.net和asp.net》