2011-09-22 101 views
4

我见过在ASP.NET MVC 3应用程序中实现全局错误处理的两种方法。一种方法是通过Global.asax.cs中的Application_Error方法。ASP.NET MVC中全局错误/异常处理的最佳实践是什么?

例如(Error Handling in global.asax):

public class SomeWebApplication : System.Web.HttpApplication { 

    // ... other methods ... 

    protected void Application_Error() { 
    // ... application error handling code ... 
    } 
} 

另一种方法是通过在RegisterGlobalFilters方法Global.asax.cs注册,再次[HandleError]动作滤波器属性。

哪种方法更好?两种方法都有什么明显的缺点?

回答

8

[HandleError]是要走的路,因为它使一切简单,责任清晰。这action filter是一个特定的ASP.NET MVC功能,因此是处理错误的官方方式。重写筛选器以添加自定义功能也很容易。

Application_Error是老办法,它并不属于MVC。

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

更新

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

+0

我想如果我注册它,因为它适用于所有控制器的全局过滤器? – dan

+3

你对MVC流水线以外的错误有何处理? – dan

+1

错误控制器,并使用web.config中的默认''部分。 – jgauffin