【问题标题】:When to override OnError?何时覆盖 OnError?
【发布时间】:2010-06-10 16:38:43
【问题描述】:

我正在考虑在我支持的应用程序中重新设计和简化我们的错误处理。目前,我们所有的页面都继承自我们创建的基类,而后者显然继承自 System.Web.UI.Page。在这个基类中,OnError 方法当前被覆盖,然后调用 MyBase.OnError,然后调用我们的自定义日志记录方法之一。

我没有看到重写 OnError 方法的任何好处,我认为让 Global.asax 中的 Application_Error 方法处理未处理的异常(记录它)然后处理自定义错误部分会更好config 将触发重定向用户的过程。

在网上看,似乎人们经常重写此方法,但我认为没有必要,而来自 MSDN 的 this 文章让我有同样的想法。

【问题讨论】:

    标签: asp.net page-lifecycle onerror


    【解决方案1】:

    我创建了一个名为 PageBase 的自定义类:

    public class PageBase : Page
    {
      protected override void OnError(..)
      {
         //handle error, redirect to error page
      }
    }
    

    所以我只需要执行一次,然后用它来捕获未处理的错误并重定向到错误页面。这样我必须做一次;我不知道 Page.Error 事件对应用程序错误有什么好处或坏处;但我使用页面错误,因为它在这里很方便;我可以在页面上下文中清除错误并重定向到错误页面...我个人的喜好。

    感谢 MSDN 链接;这是一个很好的资源。

    HTH。

    【讨论】:

    • 但是,为什么要重写 OnError 方法呢?如果您需要在页面上下文中处理信息,我理解您为什么要在该上下文中处理错误(记录有关页面的特定数据、用户输入、在屏幕上显示消息等),但为什么要覆盖现有的 OnError 方法,而不是使用 Page_Error 或 Application_Error?
    • page_error 源于 onerror(Page_Load 是从 OnLoad 方法调用等),所以这就是 OnError 的原因;它与 Page_Error 相同...所以真正的问题是为什么页面错误与应用程序错误...
    • 通过我上面提供的链接,“global.asax:Application_Error”部分上方的段落提到将代码放入 OnError Override 方法与使用 Page_Error 不同。因此,在您的情况下,我想您正在覆盖该功能以自行重定向,因此可能没问题。在我的例子中,我们并没有真正覆盖 OnError 方法中的任何功能,我们只是对抛出的异常进行非常一般的日志记录。我认为我们可以将日志记录放在应用程序级别并删除我们的 OnError 方法。感谢您的意见。
    • NP,物有所值。我认为那篇文章说 OnError 会发生更多事情,对吧?好吧,事情就是这样,如果您反映在 .NET 代码中,OnError 是在 TemplateControl 中定义的,而 OnError 只是触发错误事件......我没有看到它在 Page 类中被覆盖,所以我没有知道那个资源是正确的......我可能是错的......
    【解决方案2】:

    我从未覆盖过 OnError 方法。我喜欢使用全局 asax 的 Application_Error,它反过来会捕获任何可能不是从您的基类继承的页面。此外,重写方法用于更改其功能,因此如果您不这样做,我不会重写它。

    另外,我知道这不是您的问题的一部分,但我会查看 ELMAH 以进行错误记录:

    http://code.google.com/p/elmah/

    【讨论】:

      【解决方案3】:

      我可以看到这样一种情况:应用程序中可能只有一些页面从基类继承,并且需要以不同的方式处理错误。 Application_Error 将捕获/记录所有其他错误

      【讨论】:

        猜你喜欢
        • 2013-08-12
        • 1970-01-01
        • 1970-01-01
        • 2021-06-26
        • 2020-01-17
        • 1970-01-01
        • 2011-06-11
        • 2012-01-28
        • 1970-01-01
        相关资源
        最近更新 更多