现在的位置: 首页 > 编程语言 > 正文

ASP.NET MVC有几种类型的筛选器

2020年06月03日 编程语言 ⁄ 共 2425字 ⁄ 字号 评论关闭

  在ActionInvoker对Action的执行过程中,除了通过利用ActionDescriptor对Action方法的执行,以及之前进行的Model绑定与验证之外,还具有一个重要的工作,那就是对相关筛选器(Filter)的执行。下面学步园小编来讲解下ASP.NETMVC有几种类型的筛选器?

  ASP.NETMVC有几种类型的筛选器

  一、Filter

  虽然ASP.NETMVC提供的四种类型的筛选器具有各自实现的接口,但是对于筛选器的提供体系来说所有的筛选器都通过具有如下定义的Filter类型表示。Filter的核心是Instance属性,因为它代表真正实施筛选功能的对象,该对象实现了一个或者多个基于上述四种筛选器类型的接口。

  1:publicclassFilter

  2:{

  3:publicconstintDefaultOrder=-1;

  4:publicFilter(objectinstance,FilterScopescope,int?order);

  5:

  6:publicobjectInstance{get;protectedset;}

  7:publicintOrder{get;protectedset;}

  8:publicFilterScopeScope{get;protectedset;}

  9:}

  10:

  11:publicenumFilterScope

  12:{

  13:Action=30,

  14:Controller=20,

  15:First=0,

  16:Global=10,

  17:Last=100

  18:}

  二、FilterProvider

  Filter的提供机制与之前我们介绍的基于ModelBinder和ModelValidator的提供机制比较类似,均是通过相应的Provider来提供的。提供筛选器的FilterProvider实现了接口IFilterProvider,如下面的代码片断所示,该接口定义了唯一的方法GetFilters根据指定的Controller上下文和用于描述目标Action的ActionDescriptor对象获取一个Filter对象集合。

  1:publicinterfaceIFilterProvider

  2:{

  3:IEnumerableGetFilters(ControllerContextcontrollerContext,

  ActionDescriptoractionDescriptor);

  4:}

  ASP.NETMVC有几种类型的筛选器

  三、FilterAttribute与FilterAttributeFilterProvider

  我们通常将筛选器定义成特性以声明的方式应用到Controller类型或者Action方法上,而抽象类型FilterAttribute是所有筛选器的基类。如下面的代码片断所示,FilterAttribute特性实现了IMvcFilter接口,该接口定义了Order和AllowMultiple两个只读属性,分别用于控制筛选器的执行顺序以及多个同类的筛选器能够同时应用到同一个目标元素(类或者方法)。

  1:[AttributeUsage(AttributeTargets.Method|AttributeTargets.Class,Inherited=true,AllowMultiple=false)]2:publicabstractclassFilterAttribute:Attribute,IMvcFilter3:{4:protectedFilterAttribute();5:6:publicboolAllowMultiple{get;}7:publicintOrder{get;set;}8:}9:10:publicinterfaceIMvcFilter11:{12:boolAllowMultiple{get;}13:intOrder{get;}14:}

  四、Controller与ControllerInstanceFilterProvider

  提到ASP.NETMVC的筛选器,大部分的都只会想到通过FilterAttribute特性,实际上Controller本身(继承自抽象类Controller)就是一个筛选器。如下面的代码片断所示,抽象类Controller实现了IActionFilter、IAuthorizationFilter、IExceptionFilter和IResultFilter这四个对应着不同筛选器类型的接口。

  1:publicabstractclassController:ControllerBase,

  2:IActionFilter,

  3:IAuthorizationFilter,

  4:IExceptionFilter,

  5:IResultFilter,

  6:...

  7:{

  8://省略成员

  9:}

  针对Controller对象这种独特筛选器的FilterProvider类型为具有如下定义的ControllerInstanceFilterProvider。在实现的GetFilters方法中,它会根据指定的Controller上下文获取对应的Controller对象,并以此创建一个Filter(Controller对象作为Filter对象的Instance属性值)。该Filter的Scope不是Controller,而是First,而Order的值为-2147483648(Int32.MinValue),毫无疑问这样的Filter肯定第一个被执行。

  以上就是关于“ASP.NETMVC有几种类型的筛选器”的内容,希望对大家有用。更多资讯请关注学步园。学步园,您学习IT技术的优质平台!

抱歉!评论已关闭.