asp.net mvc - ErrorAttribute vs OnException vs Application_E



我想处理应用程序范围内的错误,并在asp.net mvc中显示一个ErrorView页面。有三种方法(或者我知道)。

1) ErrorAttribute in BaseController:Controller class.
     Can be used on individual Action/Controller/BaseController.
2) Override OnException() in the BaseController:Controller class.
     Will work on Controllers derived from BaseController
3) Application_Error in Global_aspx.

什么是最佳实践。这些方法中的哪一种应该用于应用程序范围的错误处理,还是应该使用多个或仅使用一个。

如果我们在BaseController上的ErrorAttribute或/And OnException()上处理错误,我们是否仍应在Application_error()中处理它。

我们应该在什么时候使用Application_Error()?

  1. CCD_ 1是经由属性应用的MVC过滤器。如果发生异常,您可以提供要显示的视图名称,还可以指定此筛选器应用的基本(或特定)异常类型。如果未提供视图名称,它将查找名为"错误"的视图。正如您已经注意到的,您可以将其应用于各种范围。它允许您根据异常指定不同的"错误页面"视图。

  2. Controller.OnException是一个方法,如果您的任何操作最终引发错误,就会调用它。

  3. 上面两个都是MVC概念,也是MVC管道的一部分,MVC管道位于ASP.NET管道的顶部,如果使用上面的方法处理异常,它不会传播到Application_Error,但会传播到http错误404500,如果我没记错的话。

使用什么?

一定要查看ELMAH中的应用程序范围错误日志,以及我关于ELMAH和ASP.NET MVC 的博客文章

关于显示错误页面,您应该只使用[HandleError]HandleErrorAttribute就可以了,因为它已经为您处理了所有事情(可选的过滤和每个异常类型的可选自定义错误页面)。

如果您想在应用程序级别处理错误,那么不要对控制器应用HandleError或OnException Override。

尝试从Application_Error Handler中的服务器对象获取最后一个错误检查异常类型,并根据异常类型定义要执行的操作。

对于404,您可能需要在控制器上设置一个不同的操作来处理

对于500,您可能需要在控制器上设置一个不同的操作来处理

对于NON-HTTPException(SQLException),您甚至可能想要发送电子邮件

请确保您为SEO目的设置了正确的响应状态代码。

相关内容

  • 没有找到相关文章

最新更新