1

在我的 ASP.NET MVC3 应用程序中,我希望记录所有意外问题。所以我有登录里面Application_Error()。我还发现有Controller.OnException()方法,所以我为记录错误的控制器进行了覆盖,然后调用base.OnException().

看起来每次在控制器操作中发生异常时,OnException()都会调用我的覆盖,然后Application_Error()调用,因此记录会执行两次。

如果我取消我的OnException()覆盖并且只保留登录状态,Application_Error()我仍然会记录所有问题还是会错过任何类型的事件?

4

1 回答 1

0

Controller.OnException() 是特定于 MVC 的。Application_Error() 是特定于 ASP.NET 的。MVC 位于 ASP.NET 之上,因此如果您在 Controller.OnException() 中处理异常,您可能希望将 ExceptionContext 的 ExceptionHandled 设置为 true,以便它不会沿着管道传播到 Application_Error()。

你是对的,每个错误都可以被允许传播到 Application_Error() 级别并在那里处理。我认为这真的取决于选择和偏好。我是双向的。当请求甚至没有到达 Application_Error 中的控制器(例如启动错误、404)时,我看到了在控制器的 OnException 中处理特定于操作方法的错误和其他错误的好处。如果您有一个同时使用 MVC 和 Web 表单的混合应用程序,则 Application_Error 必须用于 Web 表单错误。

因此,虽然在 Application_Error() 中处理异常是确保您的应用程序没有未捕获的异常的必备条件,但使用 Controller.OnException() 是处理特定错误子集的首选问题。

于 2013-02-21T22:49:23.823 回答