在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那么默认的,当这个Action抛出了异常时MVC将会显示Error视图,该视图位于~/Views/Shared目录下.

  设置HandleError属性

  可以通过设置下面这些属性来更改HandleErrorAttribute特性的默认处理:

  ExceptionType.指定过滤器处理那种或哪些类型的异常,如果没有指定该属性,过滤器将会处理所有的异常.

  View.指定发生异常时过滤器要显示的视图名称.

  Master.指定视图母版的名称,如果有的话.

  Order.指定过滤器应用的顺序,如果一个Action有多个HandleErrorAttribute过滤器.

  指定Order属性

  如果某个Action设置了多个HandleErrorAttribute,Order属性可以用来确定使用哪个过滤器.其值可以设置为从-1(最高优先级)到任何正整数之间的整数来标识其优先级,值越大,优先级别越低.Order属性遵循以下规则:

  应用到Controller上的过滤器将会自动应用到该Controller的所有Action上.

  如果Controller和Action都应用了HandleErrorAttribute,那么只要Order属性值相同,将会先执行Controller上的过滤器,而后才会执行Action上的过滤器.

  对于相同Order属性的过滤器,其执行先后次序不定.

  如果没有指定Order属性,则默认为-1,这意味着该过滤器将比其他的过滤器优先执行,除非其他过滤器指定了Order为-1.

  如果有多个过滤器可适用,那么第一个可以处理该异常的过滤器会被首先调用,然后针对该异常的处理将会终结.

  在View中获取异常信息

  ASP.NET MVC框架将异常信息存储在ViewDataDictionary中来传递给Error视图,该ViewDataDictionary的Model属性即是ExceptionContext类的一个实例,这个ViewData有下面几个键:

  ActionName:目标Action方法的名称

  ControllerName:目标Controller的名称

  Exception:异常对象.

  启用自定义错误处理

  下面我们来开启用于HandleErrorAttribute过滤器的自定义错误处理,打开程序的Web.config文件,在system.web节中加入一个customErrors元素,如下所示


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

  处理Error视图中的错误

  有时候在Error视图中也会发生错误,这时ASP.NET将会显示其默认的错误页面(黄底红字),为了避免这种情况的出现,我们在Web.config文件的customErrors节中来自定义错误页面,如下:


 <system.web> 
  <customErrors mode="On" defaultRedirect="GenericErrorPage.htm">
  <error statusCode="500" redirect="/Error.htm" />
  </customErrors>
  </system.web>

  示例程序

  下面的示例说明了如何对Controller和Action应用HandleErrorAttribute特性来自定义异常处理.

  示例中HomeController有一个名为ThrowException的Action方法,在该Action中将会抛出一个ApplicationException类型的错误,这个Action应用了HandleErrorAttribute,但是没有设置任何参数.当该Action执行时将会抛出一个异常,显示默认的Error视图.

  而ThrowNotImplemented方法则应用了设有两个参数的HandleErrorAttribute,View参数指定了自定义的Error视图名称:CustomErrorView,ExceptionType参数指定了该过滤器仅处理ThrowNotImplemented类型的异常.

  Controller的HandleErrorAttribute则设置了Order参数为2,意味着该过滤器只会被在Index或About方法产生异常时执行.

  同时示例给出了视图CustomErrorView和CustomError.Master的内容.

  视图CustomErrorView显示异常的信息,比如抛出异常的Controller和Action的名称,异常的内容以及堆栈跟踪信息.

转载于:https://www.cnblogs.com/JosephLiu/archive/2010/02/22/1670839.html

【转】ASP.net MVC自定义错误处理页面的方法相关推荐

  1. ASP.net MVC自定义错误处理页面的方法

    在ASP.NET MVC中,我们可以使用HandleErrorAttribute特性来具体指定如何处理Action抛出的异常.只要某个Action设置了HandleErrorAttribute特性,那 ...

  2. [转载]针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结

    针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结 汪宇杰 2014-1-11 星期六 02:31 455 Reads 1 Comments 自定义错误页面和异常记录是个很古老的话题了, ...

  3. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

  4. ASP.NET MVC 自定义Razor视图WorkContext

    概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...

  5. ASP.NET MVC 访问html静态页面

    ASP.NET MVC 访问html静态页面 大家应该遇到过当我直接访问一个前端页面时,报404这个错误 那么我们就来解决访问View文件夹下的html页面的问题: 想说明问题出现的原因,很简单,就是 ...

  6. 使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面

    使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面 使用Donut Caching和Donut Hole Caching在ASP.NET MVC ...

  7. asp.net mvc 自定义 pager 封装与优化

    asp.net mvc 自定义 pager 封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, ...

  8. ASP.NET MVC如何使用Ajax的辅助方法

    前言:前面我们已经简单的介绍过了MVC如何Jquery,因为我们如果使用Ajax的话必须要了解Jquery,这篇博客我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法,此博客是我的读书 ...

  9. 在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图

    在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图 前提介绍 这个文章我们要讨论,在ASP.NET MVC模型的项目中,怎么选择一个最有效的方式来将多个数据模型(m ...

最新文章

  1. 创建属于自己的调色板
  2. 【渝粤题库】广东开放大学 人力资源管理 形成性考核
  3. Spring基于状态机squirrel-foundation简单使用
  4. 微信公众号无限群发消息 v5.7.1 多功能版全开源 + 配置教程
  5. Spring_自动装配
  6. 【金融】【python】三因子(three factor)简单模型实证
  7. 今天,Java 12 正式发布了!
  8. 虚拟机才是 Kubernetes 的未来?
  9. 如何用仅用C语言判断编译器的大小端
  10. fpga板子怎么和电脑连_干货教程 | 手把手教你如何使用Multisim对Digilent FPGA开发板进行编程...
  11. 最优传输论文(十七):Sinkhorn Distances: Lightspeed Computation of Optimal Transport论文原理
  12. opencv学习(三十六)图像直方图均衡化equalizeHist
  13. 毕业设计 基于stm32的灯光控制系统 物联网
  14. vue3 路由缓存页面
  15. 北京大学可视化发展前沿研究生暑期学校Day4
  16. 虚拟信用卡最大的发行商有哪些?
  17. BUUCTF Web 极客大挑战 2019 EasySQL
  18. VBA中的Nz 函数使用
  19. 随机森林之信贷风险模型特征工程
  20. 离散数学考前复习:(五)图

热门文章

  1. LeetCode(1021)——删除最外层的括号(JavaScript)
  2. JavaScript学习(二十七)—解决IE以及IE8之前的浏览器下面的添加事件或者删除事件
  3. 一篇文章教你学会如何使用CSS中的雪碧图(CSS Sprite)
  4. python actor_Python定义一个Actor任务
  5. 为什么我的U盘传到一半速度会变成0然后过一会儿才回继续
  6. 旅游中用稳定器和相机拍视频是怎样的体验?
  7. 想要创业有没有过来人能够指导一下
  8. 当大家都不理解你的时候,就是你成就的捷径
  9. 为什么越来越多的人尝试做自媒体
  10. 我很多文章都有建议大伙不要轻易去创业