实现项目中出现错误,将错误信息写入文本文件中的功能.在测试的时候,为什么总是引发两次错误,内有代码
实现项目中出现异常,将异常信息写入文本文件中的功能.在测试的时候,为什么总是引发两次异常,内有代码~
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就没有问题,什么呢?
------解决方案--------------------
Error.html
------解决方案--------------------
顶 高手进来吧
------解决方案--------------------
ding
------解决方案--------------------
加上Server.ClearError();
可以参考一下下面的代码:
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就没有问题,什么呢?
------解决方案--------------------
Error.html
------解决方案--------------------
顶 高手进来吧
------解决方案--------------------
ding
------解决方案--------------------
加上Server.ClearError();
可以参考一下下面的代码:
- C# code
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{} }
------解决方案--------------------
改为RemoteOnly
------解决方案--------------------
呵呵,没研究
------解决方案--------------------
Error.html存在吗?
当custom errors mode="on"时 因为你是在本机调试 系统既是服务器端又是客户端 所以捕获异常后 还要作为客户端执行自定义的那个出错页 找到不 就错了
------解决方案--------------------
1、学习
------解决方案--------------------
跟踪吧。
------解决方案--------------------
呵呵,楼主在深入啊,确实没有研究过。
------解决方案--------------------
如果楼主有Error.html文件的话,确实比较奇怪,理论上说一共有两个在异常未处理时将被ASP.NET调用的事件:
Page_Error event,提供捕获在Page级别发生错误的方法。
Application_Error event,提供捕获在代码中的任何地方发生错误的方法。
先执行Page_Error,后执行Application_Error。Page_Error中处理错误之后使用Server.ClearError方法清除最后一个错误,可以避免再调用Application_Error。
------解决方案--------------------
------解决方案--------------------
如果有类间有继承判断可能会执行两次或多次
我的环境下配置为On时只执行一次
------解决方案--------------------