ASP.NET MVC 过滤器(四)
来源:互联网 发布:手机淘宝多图变大代码 编辑:程序博客网 时间:2024/04/27 10:27
ASP.NET MVC 过滤器(四)
前言
前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍。
ASP.NET MVC过滤器
- 过滤器在系统框架中的整体对象模型
- IAuthorizationFilter授权认证过滤器的执行过程
- 使用IAuthorizationFilter过滤器
- IActionFilter行为过滤器的执行过程
- 自定义实现IActionFilter行为过滤器
- 异常过滤器的使用
自定义实现IActionFilter行为过滤器
还是接着前面控制器篇幅的示例来演示,没看过的朋友也没关系,只要有个一个基础的显示页面就可以了。
图1
这是初始页面调用了IoCDemoController控制器默认的Index方法。
下面我们来实现我们自定义的IActionFilter类型。
代码1-1
1 public class MyCustomActionFilterAttribute : FilterAttribute, IActionFilter 2 { 3 4 public void OnActionExecuted(ActionExecutedContext filterContext) 5 { 6 filterContext.HttpContext.Response.Write("这是在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之后"); 7 8 } 9 10 public void OnActionExecuting(ActionExecutingContext filterContext)11 {12 filterContext.HttpContext.Response.Write("这是在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之前");13 }14 }
在上篇中我们对上述代码的中设计到类型结构已经作了描述了,在此不再重复,我们定义好了行为过滤器那就把它用起来。
在应用了此过滤器过后我们再来看一下运行的结果:
图2
我们可以试着把过滤器放在所要执行的控制器行为上,而不是控制器:
代码1-2
1 public class IoCDemoController : Controller 2 { 3 private IDataStandard _DataStandard; 4 5 public IoCDemoController(IDataStandard dataStandard) 6 { 7 _DataStandard = dataStandard; 8 } 9 10 [MyCustomActionFilter]11 public ActionResult Index()12 {13 return View(_DataStandard.GetProducts());14 15 }16 }
再次运行发现结果会和放在控制器上的结果一样。唯一不同的是过滤器的应用范围不同,放在方法上的时候只有在请求这个控制器行为的时候才会调用这些过滤器,而放在控制器上的过滤器,无论你请求控制器中的哪个行为都会调用。
过滤器的执行顺序
通过前几篇的学习,我们从框架的硬编码中可以看出,控制器不同类型的执行顺序,依次是授权认证过滤器、行为过滤器、结果过滤器。而还有一种异常过滤器,是不受限制的,只要有异常就会触发调用。这里说的是不同类型的过滤器之前的框架调用顺序,那么同一种类型过滤器之间的调用顺序我们怎么控制呢?来看示例:
代码1-3
1 public class MyCustomActionFileterOneAttribute : FilterAttribute, IActionFilter 2 { 3 4 public void OnActionExecuted(ActionExecutedContext filterContext) 5 { 6 filterContext.HttpContext.Response.Write("这是" + this.GetType().Name + "过滤器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之后输出"); 7 } 8 9 public void OnActionExecuting(ActionExecutingContext filterContext)10 { 11 filterContext.HttpContext.Response.Write("这是"+this.GetType().Name+"过滤器在控制器方法:" + filterContext.ActionDescriptor.ActionName + "-执行之前输出");12 }13 }
并且上述1-1代码中的输出示例修改为1-3这样的输入示例,然后我们再把新定义的行为过滤器加到行为方法上:
1 [MyCustomActionFilter]2 [MyCustomActionFileterOne]3 public ActionResult Index()4 {5 return View(_DataStandard.GetProducts());6 }
我们看一下结果如图:
图3
看到这个结果,有的朋友可能会说了,是按照添加后位置的顺序来执行的,可以这么说吧,我们再来修改一下添加在Index()方法之上的两个过滤器中的属性变量Order,这个属性来至IMvcFilter接口类型,所有的过滤器类型都是要实现它的,只不过在我们自定义中的FilterAttribute类型已经帮我们实现了。
看下修改后的示例代码:
代码1-4
1 [MyCustomActionFilter(Order=2)]2 [MyCustomActionFileterOne(Order=1)]3 public ActionResult Index()4 {5 return View(_DataStandard.GetProducts());6 }
运行结果如图:
对于过滤器的使用还有许多种方式,本篇的IActionFilter类型过滤器就讲解到这里。
作者:金源
出处:http://blog.csdn.net/jinyuan0829
本文版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
- ASP.NET MVC 过滤器(四)
- ASP.NET MVC 四 过滤器Filter
- ASP.NET MVC过滤器
- asp.net mvc 过滤器
- ASP .NET MVC过滤器
- asp.net mvc 过滤器:ArgumentNotNullFilter
- ASP.NET MVC 过滤器Filter
- ASP.NET MVC动作过滤器
- ASP.NET MVC 过滤器Filter
- ASP.NET MVC 过滤器(一)
- ASP.NET MVC 过滤器(三)
- ASP.NET MVC 过滤器(五)
- ASP.NET MVC的过滤器
- Asp.Net MVC中的过滤器
- ASP.NET MVC的过滤器
- ASP.NET MVC的过滤器
- ASP.NET MVC的过滤器
- Asp.net mvc中过滤器
- DataGridView导出excel
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- linux 文本显示和处理命令
- 二叉排序树之递归陷阱
- html第3.4.五章超文本链接
- ASP.NET MVC 过滤器(四)
- bzoj3401[Usaco2009 Mar]Look Up 仰望
- 在Centos上安装与配置Tomcat
- Spring缓存简单介绍(Spring Cache)
- uva 10795 - A Different Task (递归+状态转移)
- SRM 622 D2L3: Subsets, math, backtrack
- python的诗歌实战项目
- cocos2dx下应用RapidXml作ConfigService遇到的问题
- html第六章格式化之css