ASP.NET MVC 过滤器(五)

前言

上篇对了行为过滤器的使用做了解说,假设在控制器行为的运行中遇到了异常怎么办呢?没关系,还好框架给我们提供了异常过滤器,在本篇中将会对异常过滤器的使用做一个大概的解说。

ASP.NET MVC过滤器

  • 过滤器在系统框架中的总体对象模型
  • IAuthorizationFilter授权认证过滤器的运行过程
  • 使用IAuthorizationFilter过滤器
  • IActionFilter行为过滤器的运行过程
  • 自己定义实现IActionFilter行为过滤器
  • 异常过滤器的使用

异常过滤器的使用

在使用异常过滤器之前,我们要看一下它们的结构:

    public interface IExceptionFilter{void OnException(ExceptionContext filterContext);}

IExceptionFilter接口类型是异常过滤器必须实现的接口。当然了还有FilterAttribute特性类型这是必需要实现的。

在此不正确FilterAttribute特性类型做什么介绍。

我们看一下IExceptionFilter接口类型中的OnException()方法中的有个ExceptionContext类型的參数,ExceptionContext类型是遗产过滤器參数上下文对象。继承自ControllerContext类型。这样的编程模式在MVC框架中随处可见了不做多的解释了。

在MVC框架中给我们默认的提供了一个异常过滤器类型:

代码1-1

    public class HandleErrorAttribute : FilterAttribute, IExceptionFilter{// 摘要://     初始化 System.Web.Mvc.HandleErrorAttribute 类的新实例。public HandleErrorAttribute();public Type ExceptionType { get; set; }public string Master { get; set; }public string View { get; set; }public virtual void OnException(ExceptionContext filterContext);}

ExceptionType属性相应要处理的异常类型。假设设置某种异常类型值那么异常过滤器仅仅会针对这个类型的异常来进行做处理,默认值是处理全部异常类型。

Master属性则是设置在处理异常之后所要显示视图所用的布局。

View属性是设置在处理异常之后所要显示的视图名称。

来看演示样例:

演示样例还是接着上个篇幅的演示样例。没看过前篇的朋友也没什么影响非常easy的演示样例。

代码1-2

        public ActionResult Index(){int i = 0;int j = 3 / i;return View(_DataStandard.GetProducts());   }

首先我们在控制器的Index()方法中定义个错误处理,0是不能作为除数的处理到这必须报异常的。执行的结果如图1所看到的。

图1

非常明白的报出了异常的所在。这是我们不希望的看见的,接下来我们把异常过滤器给使用上:

代码1-3

        [HandleError]public ActionResult Index(){int i = 0;int j = 3 / i;return View(_DataStandard.GetProducts());   }

这时你会发现执行的结果和图1中所看到的的一样,这是坑爹呢??!。!

!当然不是我们须要在Web.config文件的中的<system.web>节点下做相相应的配置才干够。

代码1-4

<customErrors  mode="On"" />

须要加入代码1-4中的内容到system.web节点下,这是我们再来看一下执行的结果图。

图2

为什么会显示这个页面,这跟HandleErrorAttribute类型中的OnException(ExceptionContext filterContext)方法默认实现有关系。它默认设置就是server错误信息,那我们怎么自己定义的指定我们想显示的页面,或者是看到我们想具体看到的错误信息呢?我们再来重写一下OnException()方法吧。

代码1-5

public class MyCustomHandleErrorAttribute : HandleErrorAttribute{public override void OnException(ExceptionContext filterContext){if (filterContext == null){throw new ArgumentNullException("filterContext");}if (filterContext.Exception!=null){Exception innerException = filterContext.Exception;if (!filterContext.ExceptionHandled){string controllerName = (string)filterContext.RouteData.Values["controller"];string actionName = (string)filterContext.RouteData.Values["action"];HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);ViewResult result = new ViewResult{ViewName = "Error",MasterName = this.Master,ViewData = new ViewDataDictionary<HandleErrorInfo>(model),TempData = filterContext.Controller.TempData};filterContext.Result = result;filterContext.ExceptionHandled = true;}}}}

在上面的MyCustomHandleErrorAttribute类型实现中。我们仅仅须要关注ExceptionContext filterContext參数中的Result的设置,在代码1-5中我们指定了Error这个视图,而且还实例化了HandleErrorInfo类型作为视图模型传递到视图中,我们如今要新建一个视图,在当前控制器的目录下View/[controllername]/Error.cshtml新建这个视图文件,而且选择为强类型视图,类型则为HandleErrorInfo类型,我们看一下视图的定义。

代码1-6:

@model HandleErrorInfo
@{ViewBag.Title = "Error";
}
<h2>Error</h2>
<p>异常类型:<b>@Model.Exception.GetType().Name</b>异常所在控制器:<b>@Model.ControllerName</b>异常所在控制器行为:<b>@Model.ActionName</b>
</p>
<p>具体信息:<b>@Model.Exception.Message</b>
</p>

如今我们改动一下代码1-3中的所使用的过滤器,改动为我们代码1-5中定义的自己定义类型。再看一下执行结果:

到这里异常过滤器的基础使用也就解说完成了。另一种结果过滤器就不做解说了。基础结构和行为过滤器近乎同样使用方式也是,使用一下便知其使用方法。

作者:金源

出处:http://blog.csdn.net/jinyuan0829

本文版权归作者和CSDN共同拥有,欢迎转载,但未经作者允许必须保留此段声明,且在文章页面

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5078146.html,如需转载请自行联系原作者

ASP.NET MVC 过滤器(五)相关推荐

  1. ASP.NET MVC 过滤器(一)

    ASP.NET MVC 过滤器(一) 前言 前面的篇幅中,了解到了控制器的生成的过程以及在生成的过程中的各种注入点,按照常理来说篇幅应该到了讲解控制器内部的执行过程以及模型绑定.验证这些知识了.但是呢 ...

  2. asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码

    asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码 参考文章: (1)asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码 (2)https://www.cnblogs.co ...

  3. ASP.NET MVC 过滤器(三)

    ASP.NET MVC 过滤器(三) 前言 本篇解说行为过滤器的运行过程,过滤器实现.使用方式有AOP的意思.能够通过学习了解过滤器在框架中的运行过程从而获得一些AOP方面的知识(在顺序运行的过程中, ...

  4. ASP.NET MVC过滤器(一)

    MVC过滤器是加在 Controller 或 Action 上的一种 Attribute,通过过滤器,MVC 网站在处理用户请求时,可以处理一些附加的操作,如:用户权限验证.系统日志.异常处理.缓存等 ...

  5. ASP.NET MVC过滤器的使用

    一.过滤器的理解 1.ASP.NET MVC中继承自FilterAttributeAttribute的类统称为过滤器 2.Authorize HandlerError OutputCache这些类都直 ...

  6. ASP .NET MVC过滤器

    MVC过滤器一共分为四个: ActionFilter:方法过滤器 ResultFilter:结果过滤器 AuthorizationFilter:授权过滤器 ExceptionFilter:异常处理过滤 ...

  7. ASP.NET MVC教程五:ASP.NET MVC中的路由

    一.概述 在ASP.NET MVC架构中,控制器在3大核心构件中处于中心地位,通过控制器支配模型和视图,然而从浏览器发出的请求到控制器还需要路由的协助,路由将特定的请求和控制器的动作对应起来. 在AS ...

  8. ASP.NET MVC 4 (五) 视图

    视图引擎与视图 多数情况下控制器action方法返回ViewResult对象,MVC内建action调用器ControllerActionInvoker负责调用控制器action方法并调用视图引擎处理 ...

  9. ASP.NET MVC过滤器自定义Authorize实现身份验证

    最近在做一个.NET MVC框架的后台项目,涉及到5个权限,而控制器下的方法有些只能高权限用户使用,低权限用户不能访问,一开始是在方法里面写判断,但是功能方法多了以后,发现代码重复的很严重,不符合面向 ...

最新文章

  1. oracle和arcgis优势,Oracle spatial 使用的一些感受
  2. Flex入门搭建j2EE开发环境
  3. MATLAB基本操作(一):MATLAB中变量的文件存储
  4. 图解 Elasticsearch 原理
  5. 实现redis 手动_Redis精华所在,一口气说完Redis的主从复制和哨兵模式
  6. 配置yml_dctc:生成docker-compose.yml配置的工具
  7. 带有Oracle Digital Assistant和Fn Project的会话式UI。 第二部分
  8. CNCC 技术论坛 | 知识图谱赋能数字经济
  9. 被单位开除、摆地摊、住酒店带脸盆被褥,还你一个真实的陈景润
  10. c#分页读取GB文本文件
  11. tensorflow如何微调时如何只训练后两层_TensorFlow官方发布剪枝优化工具:参数减少80%,精度几乎不变...
  12. Excel的实用函数
  13. Sphinx 2.2.3 安装和配置,英文数字中文搜索
  14. iOS.数据持久化.PersistenceLayer.属性列表
  15. Select2使用经验及多Jquery版本处理
  16. celery异步发送邮箱
  17. openpyxl,给单元格插入公式,求和通过excel公式实现
  18. 诗词格律[1] 诗词入门
  19. 一摞烙饼的排序问题--读书笔记(2)
  20. 大数据技术与应用实验报告2

热门文章

  1. tor the onion router下载_人教版英语知识点练习:七年级下册Unit8要点讲解,重点短语句型,语法聚焦(可下载打印版,附答案)...
  2. break语句python_Python break 语句
  3. java enum.isdefined_C# System.Enum.IsDefined 方法 - CSharp 参考教程
  4. android 手机铃声设置铃声设置,Android 修改系统来电铃声
  5. python清洗完数据做什么_python数据清洗的基本思路是什么?
  6. gps天线拆解图片_飞宇稳定器拆解:握杆的手,不怕颤抖
  7. ssm启动不报错_解决idea导入ssm项目启动tomcat报错404的问题
  8. Python AttributeError: 'module' object has no attribute 'posseg'
  9. PyCharm平台下初学Django框架
  10. Java学习笔记:文件通道(FileChannel)