Global.asax文件的关键代码:
void Application_Error(object sender, EventArgs e)
{
Exception x = Server.GetLastError().GetBaseException();
Logger logger = new Logger();
Logger.ErrorInfo info = new Logger.ErrorInfo("aaa", "TestApp", x.ToString());
//将错误信息记录到文本文件中
logger.SetErrorLog(info);
}--------------------------------------------------------------------------------------------------------------------
web.config文件关键代码:
<system.web>
<customErrors mode="On" defaultRedirect="Error.html">
</customErrors>
</system.web>---------------------------------------------------------------------------------------------------------------------我在一个页面引发一个异常,如果<customErrors>元素的mode设置为On,则Application_Error执行两次,其中第一次是我引发的异常执行一次
,但不明白第二次引发的异常从哪来的(第二次引发异常的信息描述为"System.Web.HttpException: 文件不存在"),什么文件不存在?
但将Mode设置为RemoteOnly就没有问题,什么呢?
void Application_Error(object sender, EventArgs e)
{
Exception x = Server.GetLastError().GetBaseException();
Logger logger = new Logger();
Logger.ErrorInfo info = new Logger.ErrorInfo("aaa", "TestApp", x.ToString());
//将错误信息记录到文本文件中
logger.SetErrorLog(info);
}--------------------------------------------------------------------------------------------------------------------
web.config文件关键代码:
<system.web>
<customErrors mode="On" defaultRedirect="Error.html">
</customErrors>
</system.web>---------------------------------------------------------------------------------------------------------------------我在一个页面引发一个异常,如果<customErrors>元素的mode设置为On,则Application_Error执行两次,其中第一次是我引发的异常执行一次
,但不明白第二次引发的异常从哪来的(第二次引发异常的信息描述为"System.Web.HttpException: 文件不存在"),什么文件不存在?
但将Mode设置为RemoteOnly就没有问题,什么呢?
可以参考一下下面的代码:protected void Application_Error(Object sender, EventArgs e)
{
try
{
if(Convert.ToInt32(Application["tag"])>2)
{
Application["tag"]=1;
return;
}
Application["tag"]=Convert.ToInt32(Application["tag"])+1;
Exception objErr = Server.GetLastError().GetBaseException();
Application["errorPage"] = Request.Url.ToString();
Application["errorMsg"] =objErr.Message;
Server.ClearError();
Response.Redirect("Error.aspx");
}
catch{}
}Error.aspx.csprivate void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
try
{
Application["tag"]=1;
lblError.Text=this.lblErrorPage.Text+Application["errorPage"].ToString()+"<br>"+this.lblErrorMsg.Text+Application["errorMsg"].ToString();
Artdio.MessageBox.ShowPopupWin(this,"","",30000);
Artdio.Web.Class.WriterLog log = new Artdio.Web.Class.WriterLog( Server.MapPath(@"./Log/Error.log"));
log.WriterError(Application["errorPage"].ToString(),Application["errorMsg"].ToString());
}
catch{}
}
}
谢谢楼上的回答,但我的帖子已经说了改为RemoteOnly好用。我现在不清楚的是为什么改为On后,就引发两次Application_Error,正常应该是一次的,即我手动引发的异常。
当custom errors mode="on"时 因为你是在本机调试 系统既是服务器端又是客户端 所以捕获异常后 还要作为客户端执行自定义的那个出错页 找到不 就错了
早就跟踪过了,但是看不到哪儿出错了,直接就跳到Application_Error中了
Page_Error event,提供捕获在Page级别发生错误的方法。
Application_Error event,提供捕获在代码中的任何地方发生错误的方法。
先执行Page_Error,后执行Application_Error。Page_Error中处理错误之后使用Server.ClearError方法清除最后一个错误,可以避免再调用Application_Error。