< 返回技术文档列表

ASP.NET MVC的筛选器有哪些

发布时间:2021-11-06 23:58:43

本篇内容主要讲解“ASP.NET MVC的筛选器有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET MVC的筛选器有哪些”吧!

  一、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.NET MVC的筛选器有哪些”有了更深的了解,不妨来实际操作一番吧!这里是血鸟云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


/template/Home/Zkeys/PC/Static