我在我的应用程序中使用ASP.NET自定义错误页面。以下是CustomErrors标记的web.config文件条目
<customErrors mode="On" defaultRedirect="Error.aspx" redirectMode="ResponseRewrite" />
以下是Error.aspx页面上的代码段
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Exception ex = Server.GetLastError();
if(ex != null)
{
CommonUtils.SendException(ex.Message.ToString(), ex.StackTrace.ToString());
Server.ClearError();
}
}
}
如果“ex”不为null,代码将发送异常电子邮件。这很好用。
发送电子邮件后,我想清除所有错误,以便在用户点击刷新按钮时不会发送电子邮件。但即使在使用Server.ClearError之后,Server.GetLastError()也会返回一个值返回页面。
答案 0 :(得分:1)
您的代码应该重写为以下内容: 的global.asax.cs
protected void Application_Error(object sender, EventArgs e)
{
Exception ex= Server.GetLastError();
CommonUtils.SendException(ex.Message.ToString(), ex.StackTrace.ToString());
}
然后,错误页面的Page_Load事件应为空。正如您可以在本文中阅读的那样:https://support.microsoft.com/en-us/kb/306355 Server.ClearErrors会停止错误传播,因此如果在页面上调用它,则Application_Error事件将不会处理错误。如果你没有在Application_Error中调用它,那么应用程序将在web.config中查找customErrors声明,重定向到该页面。
如果您没有调用Server.ClearError或捕获错误 Page_Error或Application_Error事件处理程序,处理错误 基于Web.config部分中的设置 文件。在该部分中,您可以指定重定向页面 作为默认错误页面(defaultRedirect)或指定给特定的 基于引发的HTTP错误代码的页面。你可以用它 用于自定义用户收到的错误消息的方法。
如果发生的错误未被捕获到任何先前级别 在您的应用程序中,将显示此自定义页面。这个部分 演示了如何修改Global.asax文件 永远不会调用Server.ClearError。结果,处理错误 在Web.config文件中作为捕获错误的最后一点。