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