【问题标题】:Server.ClearError() with page refreshServer.ClearError() 与页面刷新
【发布时间】:2016-03-23 15:20:20
【问题描述】:

我在我的应用程序中使用 ASP.NET 自定义错误页面。以下是 CustomErrors 标签的 web.config 文件条目

<customErrors mode="On" defaultRedirect="Error.aspx" redirectMode="ResponseRewrite" />

以下是Error.aspx页面上的代码sn-p

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”不为空,代码将发送异常电子邮件。这工作正常。

发送电子邮件后,我想清除所有错误,以便在用户点击刷新按钮时不会发送电子邮件。但是即使使用了Server.ClearError,当页面回传时,Server.GetLastError() 也会返回一个值。

【问题讨论】:

  • 为什么不将它保存在 Global.asax 的 ApplicationError() 方法中并使用 server.transfer() 导航到错误页面

标签: asp.net .net c#-3.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事件应该是空的。正如您在这篇 MS 文章中所读到的: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 文件中作为捕获错误的最后一点。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 2019-11-27
  • 2011-12-22
  • 2010-10-21
相关资源
最近更新 更多