HandleError 过滤器
[HandleError]过滤器提供了一种声明方式,来在一个Controller或Action方法上表示,如果在处理一个ASP.NET.MVC请求中发生错误的话,应该显示一个友好的错误回复。
要试验一下的话,在项目中加一个新的TestController,实现一个action方法,在其中象下面这样抛出一个异常:
在默认情形下,如果浏览器指向URL的话,它会给远程用户显示一个默认的ASP.NET错误页面(除非你去web.config文件中配置<customErrors>节):
我们可以在我们的Controller类或其中的Action方法上加一个[HandleError]属性,来改变要显示的HTML错误,而对终端用户比较友好的信息:
HandleError过滤器会捕捉住所有的异常(包括处理视图模板时抛出的错误),在出错时显示一个定制的Error视图回复。在默认情形下,它试图在你的项目中寻找一个名为“Error”的视图模板来生成回复。你可以将“Error”视图置于同个Controller相应的视图的目录之中(例如,上面的TestController的\Views\Test目录),也可以置于\Views\Shared文件夹中(系统会先找一个特定于控制器的出错视图,如果没找到的话,会在Shared文件夹中寻找,该文件夹包含了为所有控制器所共享的视图)。
从第四个预览版开始,在你创建新的ASP.NET MVC项目时,Visual Studio现在会自动为你在\Views\Shared文件夹中加一个默认的“Error”视图模板:
在我们的TestController类上加[HandleError]属性后,在默认情形下,它会给远程用户显示一个象下面这样的HTML错误页面(注意,它使用了项目的母板页,这样就将错误信息集成进了站点之中)。很明显地,你可以去定制这个Error视图模板,显示你想要的任何HTML或者更加友好的错误信息,下面只不过是随该版本而来的原装的信息:
为帮助开发人员,在本地浏览应用时,Visual Studio中由新的项目模板提供的默认的Error视图模板还会显示额外的错误堆栈跟踪信息:
你可以在Error视图模板中将代码删除来将其关闭,或者也可以在你的web.config文件中将<customErrors>设成“Off”。
在默认情形下,[HandleError]过滤器将捕捉和处理请求中抛出的所有异常。你也可以在[HandleError]属性上指定 "ExceptionType"和"View"属性来指定你感兴趣的特定异常类型,以及指定定制的错误视图:
在上面的代码中,我选择为SqlException和NullReferenceException异常显示定制的错误视图,所有其它的异常则将使用默认的“Error”视图模板。