博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HandleError过滤器
阅读量:7246 次
发布时间:2019-06-29

本文共 1232 字,大约阅读时间需要 4 分钟。

  hot3.png

[HandleError]过滤器提供了一种声明的方式,来在一个Controller或一个Action方法上表示,如果在处理一个ASP.NET MVC请求中发生错误的话,应该显示一个友好的错误回复。

要试验一下的话,在项目中加一个新的TestController,实现一个action方法,在其中象下面这样抛出一个异常:

HandleError过滤器 - sara1124 - sara1124的博客

在默认情形下,如果将浏览器指向这个URL的话,它会给远程用户显示一个默认的ASP.NET错误网页(除非你去web.config文件中配置了<customErrors>节):

HandleError过滤器 - sara1124 - sara1124的博客

我们可以在我们的Controller类或其中的Action方法上加一个[HandleError]属性,来改变要显示的HTML错误,而显示对终端用户比较友好的信息:

HandleError过滤器 - sara1124 - sara1124的博客

HandleError过滤器会捕捉住所有的异常(包括处理视图模板时抛出的错误),在出错时显示一个定制的Error视图回复。在默认情形下,它试图在你的项目中寻找一个名为“Error”的视图模板来生成回复。你可以将“Error”视图置于同个Controller相应的视图的目录之中(例如,上面的TestController的\Views\Test目录),也可以置于\Views\Shared文件夹中(系统会先找一个特定于控制器的出错视图,如果没找到的话,会在Shared文件夹中寻找,该文件夹包含了为所有控制器所共享的视图)。

从第四个预览版开始,在你创建新的ASP.NET MVC项目时,Visual Studio现在会自动为你在\Views\Shared文件夹中加一个默认的“Error”视图模板:

HandleError过滤器 - sara1124 - sara1124的博客

在我们的TestController类上加[HandleError]属性后,在默认情形下,它会给远程用户显示一个象下面这样的HTML错误页面(注意,它使用了项目的母板页,这样就将错误信息集成进了站点之中)。很明显地,你可以去定制这个Error视图模板,显示你想要的任何HTML或者更加友好的错误信息,下面只不过是随该版本而来的原装的信息:

HandleError过滤器 - sara1124 - sara1124的博客

为帮助开发人员,在本地浏览应用时,Visual Studio中由新的项目模板提供的默认的Error视图模板还会显示额外的错误堆栈跟踪信息:

HandleError过滤器 - sara1124 - sara1124的博客

你可以在Error视图模板中将代码删除来将其关闭,或者也可以在你的web.config文件中将<customErrors>设成“Off”。

在默认情形下,[HandleError]过滤器将捕捉和处理请求中抛出的所有异常。你也可以在[HandleError]属性上指定 "ExceptionType"和"View"属性来指定你感兴趣的特定异常类型,以及指定定制的错误视图:

HandleError过滤器 - sara1124 - sara1124的博客

在上面的代码中,我选择为SqlException和NullReferenceException异常显示定制的错误视图,所有其它的异常则将使用默认的“Error”视图模板。

转载于:https://my.oschina.net/i33/blog/57754

你可能感兴趣的文章
[ACM] ZOJ 3725 Painting Storages (DP计数+组合)
查看>>
Java:String和Date、Timestamp之间的转换
查看>>
Android自己定义实现循环滚轮控件WheelView
查看>>
新eclipse 打开就版本的工作空间提示:
查看>>
1250 Fibonacci数列
查看>>
activiti自己定义流程之整合(三):整合自己定义表单创建模型
查看>>
Tomcat 文件夹结构
查看>>
myeclipse集成maven
查看>>
数据结构精要------冒泡与直接排序算法
查看>>
python中将图片从客户端(client)推到(POST)到服务器端(server)的方法
查看>>
落地生根两周年,微软Azure进入2.0时代
查看>>
一维maxpooling
查看>>
如何在Centos7上安装和使用ZFS
查看>>
ASCII
查看>>
poj2021
查看>>
mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法...
查看>>
poj3103
查看>>
HDU 4791 &amp; ZOJ 3726 Alice&#39;s Print Service (数学 打表)
查看>>
01背包
查看>>
HttpClient4.X 升级 入门 + http连接池使用
查看>>