如果我还登录了Application_Error(),那么在MVC控制器OnException()中添加日志是否有意义?

时间:2013-02-21 06:58:59

标签: asp.net .net asp.net-mvc iis

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

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

如果我取消OnException()覆盖,只留下Application_Error()中的记录,我还会记录所有问题,还是会遗漏任何类型的事件?

1 个答案:

答案 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()是处理特定错误子集的首选问题。