ASP.NET MVC中全局错误/异常处理的最佳实践是什么?

dan*_*dan 4 exception-handling asp.net-mvc-3

我已经看到两种在ASP.NET MVC 3应用程序中实现全局错误处理的方法.一种方法是通过该Application_Error方法Global.asax.cs.

例如(global.asax中的错误处理):

public class SomeWebApplication : System.Web.HttpApplication {

  // ... other methods ...

  protected void Application_Error() {
    // ... application error handling code ...
  }
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是通过方法中[HandleError]注册的动作过滤器属性RegisterGlobalFilters,再次进入Global.asax.cs.

哪种方法更好?两种方法都有任何明显的缺点吗?

jga*_*fin 8

[HandleError]是一种方法,因为它保持一切简单,责任明确.此操作筛选器是特定的ASP.NET MVC功能,因此是处理错误的官方方式.覆盖过滤器以添加自定义功能也非常容易.

Application_Error 是旧的方式,并不真正属于MVC.

[HandleError]只要您记得用它标记控制器(或基本控制器),该属性就可以正常工作.

更新:

创建了一个博客条目:http://blog.gauffin.org/2011/11/how-to-handle-errors-in-asp-net-mvc/

  • 你在MVC管道之外的错误方法是什么? (3认同)