ASP.NET MVC 过滤器(四)

简介:

 ASP.NET MVC 过滤器(四)

前言

前一篇对IActionFilter方法执行过滤器在框架中的执行过程做了大概的描述,本篇将会对IActionFilter类型的过滤器使用来做一些介绍。

 

ASP.NET MVC过滤器

  • 过滤器在系统框架中的整体对象模型

  • IAuthorizationFilter授权认证过滤器的执行过程

  • 使用IAuthorizationFilter过滤器

  • IActionFilter行为过滤器的执行过程

  • 自定义实现IActionFilter行为过滤器

  • 异常过滤器的使用

自定义实现IActionFilter行为过滤器

还是接着前面控制器篇幅的示例来演示,没看过的朋友也没关系,只要有个一个基础的显示页面就可以了。

图1

这是初始页面调用了IoCDemoController控制器默认的Index方法。

下面我们来实现我们自定义的IActionFilter类型。

代码1-1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  1      public  class  MyCustomActionFilterAttribute : FilterAttribute, IActionFilter
  2     {
 
  4          public  void  OnActionExecuted(ActionExecutedContext filterContext)
  5         {
  6             filterContext.HttpContext.Response.Write( "这是在控制器方法:"  + filterContext.ActionDescriptor.ActionName +  "-执行之后" );
  7             
  8         }
 
10          public  void  OnActionExecuting(ActionExecutingContext filterContext)
11         {
12             filterContext.HttpContext.Response.Write( "这是在控制器方法:"  + filterContext.ActionDescriptor.ActionName +  "-执行之前" );
13         }
14 }

在上篇中我们对上述代码的中设计到类型结构已经作了描述了,在此不再重复,我们定义好了行为过滤器那就把它用起来。

在应用了此过滤器过后我们再来看一下运行的结果:

图2

我们可以试着把过滤器放在所要执行的控制器行为上,而不是控制器:

代码1-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  1      public  class  IoCDemoController : Controller
  2     {
  3          private  IDataStandard _DataStandard;
 
  5          public  IoCDemoController(IDataStandard dataStandard)
  6         {
  7             _DataStandard = dataStandard;
  8         }
 
10         [MyCustomActionFilter]
11          public  ActionResult Index()
12         {
13              return  View(_DataStandard.GetProducts());
14             
15         }
16     }

再次运行发现结果会和放在控制器上的结果一样。唯一不同的是过滤器的应用范围不同,放在方法上的时候只有在请求这个控制器行为的时候才会调用这些过滤器,而放在控制器上的过滤器,无论你请求控制器中的哪个行为都会调用。

 

过滤器的执行顺序

通过前几篇的学习,我们从框架的硬编码中可以看出,控制器不同类型的执行顺序,依次是授权认证过滤器、行为过滤器、结果过滤器。而还有一种异常过滤器,是不受限制的,只要有异常就会触发调用。这里说的是不同类型的过滤器之前的框架调用顺序,那么同一种类型过滤器之间的调用顺序我们怎么控制呢?来看示例:

代码1-3

1
2
3
4
5
6
7
8
9
10
11
12
13
  1      public  class  MyCustomActionFileterOneAttribute : FilterAttribute, IActionFilter
  2     {
 
  4          public  void  OnActionExecuted(ActionExecutedContext filterContext)
  5         {
  6             filterContext.HttpContext.Response.Write( "这是"  this .GetType().Name +  "过滤器在控制器方法:"  + filterContext.ActionDescriptor.ActionName +  "-执行之后输出" );
  7         }
 
  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
2
3
4
5
6
1         [MyCustomActionFilter]
2         [MyCustomActionFileterOne]
3          public  ActionResult Index()
4         {
5              return  View(_DataStandard.GetProducts());
6         }

我们看一下结果如图:

图3

看到这个结果,有的朋友可能会说了,是按照添加后位置的顺序来执行的,可以这么说吧,我们再来修改一下添加在Index()方法之上的两个过滤器中的属性变量Order,这个属性来至IMvcFilter接口类型,所有的过滤器类型都是要实现它的,只不过在我们自定义中的FilterAttribute类型已经帮我们实现了。

看下修改后的示例代码:

代码1-4

1
2
3
4
5
6
1         [MyCustomActionFilter(Order=2)]
2         [MyCustomActionFileterOne(Order=1)]
3          public  ActionResult Index()
4         {
5              return  View(_DataStandard.GetProducts());
6         }

运行结果如图:

对于过滤器的使用还有许多种方式,本篇的IActionFilter类型过滤器就讲解到这里。

 




     本文转自jinyuan0829 51CTO博客,原文链接:http://blog.51cto.com/jinyuan/1427499,如需转载请自行联系原作者



相关文章
|
11月前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
322 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
227 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
260 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
195 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
340 0
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
451 0
|
前端开发 数据安全/隐私保护
net MVC中的模型绑定、验证以及ModelState
net MVC中的模型绑定、验证以及ModelState 模型绑定 模型绑定应该很容易理解,就是传递过来的数据,创建对应的model并把数据赋予model的属性,这样model的字段就有值了。
1809 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
433 0
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
316 0
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
402 0