前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍。
成都创新互联-专业网站定制、快速模板网站建设、高性价比邵原网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式邵原网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖邵原地区。费用合理售后完善,10年实体公司更值得信赖。过滤器在系统框架中的整体对象模型
IAuthorizationFilter授权认证过滤器的执行过程
使用IAuthorizationFilter过滤器
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类型过滤器就讲解到这里。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。