ASP.NET MVC中的全局错误处理。可能?

时间:2012-03-09 06:30:26

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

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

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

2 个答案:

答案 0 :(得分:4)

是 - 如果您查看Global.asax,GlobalFilterCollection已添加到 filters.Add(new HandleErrorAttribute());

HandleErrorAttribute

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

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

答案 1 :(得分:1)

就像archil所说的那样,你甚至不需要用[HandleError]装饰控制器/动作,因为默认情况下(在MVC3中)它是打开的。

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

如果需要,您可以稍微自定义它,模型是HandleErrorInfo,这样您就可以将控制器名称,操作,消息和堆栈跟踪拉出来,如果您想要一个漂亮的自定义异常消息。这里有一个问题:你不能在这个页面上有任何逻辑/操作。

您必须在Web.config中启用自定义错误,否则您将获得标准的黄色屏幕:

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

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