【问题标题】:Global error handling in ASP.NET MVC. Possible?ASP.NET MVC 中的全局错误处理。可能的?
【发布时间】:2012-03-26 15:45:30
【问题描述】:

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

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

【问题讨论】:

  • Application_Error 捕获所有错误。 controllers generated by your code 是什么意思?什么样的错误没有被捕获?

标签: c# asp.net-mvc error-handling asp.net-mvc-4


【解决方案1】:

就像 archil 说的,你甚至不必用 [HandleError] 来装饰控制器/动作,因为它默认是开启的(在 MVC3 中)。

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

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

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

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

在 customErrors 中,您可以定义一个静态后备页面,以防万一其他一切都失败。

【讨论】:

    【解决方案2】:

    是的 - 如果您查看 Global.asax,HandleErrorAttribute 将添加到 GlobalFilterCollection

            filters.Add(new HandleErrorAttribute());
    

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

    HandleErrorAttribute 是 asp.net mvc 中错误处理的标准方式。

    【讨论】:

    • 你能举例说明如何通过派生的 HandleErrorAttribute 类处理所有类型的异常吗?
    • 标准方式,但不全面。据我所知,在控制器之外抛出的异常没有这个好处。比如路由处理中的异常;甚至在处理异常时可能会出现异常。
    猜你喜欢
    • 2012-03-16
    • 2022-01-07
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 2019-10-26
    相关资源
    最近更新 更多