2

我有一个 MVC 3 Web 应用程序,我在其中使用“ HandleError ”动作过滤器进行异常处理。我的这个动作过滤器实现如下:

[HandleError]
public class BaseController : Controller {...}

这是派生我所有控制器的基类。在我的 web.config 我有我的共享文件夹中有一个Error.cshtml(.cshtml 因为我使用 Razor)。一切正常,我得到了很好的异常处理(由我的函数格式化)

最近,不知何故,我得到了“未处理的异常 (YSOD) ”,并且由于“customErrors”,我得到了默认的 ASP.Net 错误消息,它没有关于实际异常的任何信息。这发生在 AJAX 回帖中。但是,我无法重现它。

任何类型的错误都可能逃脱此操作过滤器吗?

4

1 回答 1

4

任何类型的错误都可能逃脱此操作过滤器吗?

HandleError过滤器不会捕获应用程序中触发的所有异常。它可以捕获在动作、动作过滤器中触发的异常......只是在 MVC 上下文中。此外,它不会捕获HTTP状态码不是 500 的异常。仅依赖HandleErrorMVC 应用程序中的过滤器是一个坏主意。

您仍然应该依赖Application_Error事件来执行一些日志记录和customErrors部分来显示自定义错误页面,以显示HandleError.

我写了一篇关于这个主题的博客文章,可能会对你有所帮助

于 2012-08-30T11:56:55.613 回答