我知道 SO 中有很多关于 ASP.NET MVC中的错误处理的问题。
我知道,大多数人都试图通过三种方式实现目标:
创建BaseController
并覆盖OnException
方法
使用[HandleError]
或自定义例外过滤器。
Application_Error
事件
前两种方法无法处理所有异常,它们只是由动作方法/过滤器引发的,所以显然第三种方法将成为全局异常处理程序的最佳方法。
我的问题是为什么我应该采用[HandleError]
方式?它带来了什么好处,我无法通过Application_Error
?
最后,我是否想要在MVC应用程序中认真对待customErrors
部分?
注意:我的要求很平常。每当发生异常时,请记录它并返回自定义错误页面。自定义错误页面可能会更改,具体取决于状态代码。
答案 0 :(得分:9)
最明显的是[HandleError]
允许您在不同的控制器和操作中以不同方式处理错误。它比Application_Error
处理程序中的某种switch语句更优雅。
另一个好处是[HandleError]
仍然可以访问控制器以及随附的所有MVC优点,因此您仍然可以返回View
或调用其他操作。一旦你落到Application_Error
,你就失去了ControllerContext
,除了重定向之外你还没有剩下的选择。