MVC ASP.NET 全局错误处理.可能

本文关键字:处理 可能 错误 全局 ASP NET MVC | 更新日期: 2023-09-27 18:27:09

似乎 Global.asax 中的Application_Error只捕获 MVC 运行时生成的错误。 还有其他解决方案涉及覆盖 Controller.OnException。

是否可以创建一个错误处理程序来捕获来自所有控制器(包括我的代码生成的控制器(的所有错误?

MVC ASP.NET 全局错误处理.可能

是的

- 如果你看一下 Global.asax,HandleErrorAttribute 被添加到GlobalFilterCollection

        filters.Add(new HandleErrorAttribute());

但是默认的 HandleErrorAttribute 将仅处理内部服务器错误,即所有不是 HttException 和错误代码为 500 的 HttpExceptions 的异常。可以从该属性派生以处理所有异常并进一步自定义默认行为。

HandleErrorAttribute是 asp.net MVC 中错误处理的标准方法。

就像archil说的,你甚至不必用[HandleError]装饰控制器/动作,因为它默认处于打开状态(在MVC3中(。

出错时,它将返回 Error.cshtml 视图,如果您使用项目模板,该视图位于视图/共享中。

如果需要,您可以对其进行一些自定义,该模型是 HandleErrorInfo 因此,如果您想要一个漂亮的自定义异常消息,您可以从中提取控制器名称、操作、消息和堆栈跟踪。这里有一个问题:您不能在此页面上有任何逻辑/操作。

而且您必须在 Web.config 中启用自定义错误,否则无论如何您都会得到标准的黄色屏幕:

<system.web>
    <customErrors mode="On"/>
    ...
</system.web>

在 customErrors 中,您可以定义一个静态回退页面,以防其他所有内容都失败。