带有页面刷新的Server.ClearError()

时间:2016-03-23 06:43:31

标签: asp.net .net c#-3.0

我在我的应用程序中使用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()也会返回一个值返回页面。

1 个答案:

答案 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文件中作为捕获错误的最后一点。