在我的ASP.NET MVC3应用程序中,我希望记录所有意外问题。所以我在Application_Error()
内登录。此外,我发现有Controller.OnException()
方法,因此我对我的控制器进行了覆盖,记录错误,然后调用base.OnException()
。
看起来每次在控制器操作中发生异常时,我都会调用OnException()
覆盖,然后调用Application_Error()
,因此会执行两次记录。
如果我取消OnException()
覆盖,只留下Application_Error()
中的记录,我还会记录所有问题,还是会遗漏任何类型的事件?
答案 0 :(得分:0)
Controller.OnException()是特定于MVC的。 Application_Error()是特定于ASP.NET的。 MVC位于ASP.NET之上,因此如果您在Controller.OnException()中处理异常,您可能希望将ExceptionContext的ExceptionHandled设置为true,以便它不会沿着管道传播到Application_Error()。
你是对的,因为每个错误都可以传播到Application_Error()级别并在那里处理。我认为这取决于选择和偏好。我两种方式都看到了。我看到在处理器的OnException中处理动作方法特定错误的好处以及当请求甚至没有到达Application_Error中的控制器时的其他错误(例如启动错误,404s)。如果您有一个同时使用MVC和Web表单的混合应用程序,则必须将Application_Error用于Web表单错误。
因此,虽然处理Application_Error()中的异常是确保您的应用程序没有未捕获的异常的必备条件,但使用Controller.OnException()是处理特定错误子集的首选问题。