没有合适的资源?快使用搜索试试~ 我知道了~
ASP.NET MVC提供了四种类型的筛选器(AuthorizationFilter、ActionFilter、ResultFilter和ExceptionFilter),本篇文章对其进行一一介绍,需要的朋友来看下吧
资源推荐
资源详情
资源评论
详解详解ASP.NET MVC的筛选器的筛选器
ASP.NET MVC提供了四种类型的筛选器(AuthorizationFilter、ActionFilter、ResultFilter和ExceptionFilter),
本篇文章对其进行一一介绍,需要的朋友来看下吧
在ActionInvoker对Action的执行过程中,除了通过利用ActionDescriptor对Action方法的执行,以及之前进行的Model绑定与验
证之外,还具有一个重要的工作,那就是对相关筛选器(Filter)的执行。ASP.NET MVC的筛选器是一种基于AOP(面向方
面编程)的设计,我们将一些非业务的逻辑实现在相应的筛选器中,然后以一种横切(Crosscutting)的方式应用到对应的
Action方法。当Action方法执行前后,这些筛选器会自动执行。ASP.NET MVC提供了四种类型的筛选器
(AuthorizationFilter、ActionFilter、ResultFilter和ExceptionFilter),它们对应着相应的筛选器接口(IAuthorizationFilter、
IActionFilter、IResultFilter和IExceptionFilter)。[本文已经同步到《How ASP.NET MVC Works?》中]
目录目录
一、Filter
二、FilterProvider
三、FilterAttribute与FilterAttributeFilterProvider
四、Controller与ControllerInstanceFilterProvider
五、GlobalFilterCollection
六、实例演示:验证Filter的提供机制和执行顺序
一、一、Filter
虽然ASP.NET MVC提供的四种类型的筛选器具有各自实现的接口,但是对于筛选器的提供体系来说所有的筛选器都通过具有
如下定义的Filter类型表示。Filter的核心是Instance属性,因为它代表真正实施筛选功能的对象,该对象实现了一个或者多个
基于上述四种筛选器类型的接口。
public class Filter
{
public const int DefaultOrder = -1;
public Filter(object instance, FilterScope scope, int? order);
public object Instance { get; protected set; }
public int Order { get; protected set; }
public FilterScope Scope { get; protected set; }
}
public enum FilterScope
{
Action = 30,
Controller = 20,
First = 0,
Global = 10,
Last = 100
}
注:由于System.Web.Mvc.Filter和实现了IAuthorizationFilter、IActionFilter、IResultFilter和IExceptionFilter的类型均可以被称
为“筛选器”,为了不至于造成混淆,在没有做明确说明的情况下,我们使用英文“Filter”和中文“筛选器”分别来表示它们。
Filter的Order和Scope属性最终决定了筛选器的执行顺序。Order属性对应数值越小,执行的优先级越高,该属性的默认值为-
1(对应着Filter中定义的常量DefaultOrder)。如果两个Filter具有相同的Order属性值,那么Scope属性最终决定哪个被优先
执行。Filter的Scope属性类型是一个类型为FilterScope的枚举。该枚举表示应用Filter的范围,Action和Controller代表Action
方法和Controller类级别;First和Last意味着希望被作为第一个和最后一个Filter来执行;Global代表一个全局的Filter。
通过上面的代码片断我们可以看到FilterScope的5个枚举选项均被设置了一个值,这个值决定了Filter的执行顺序,具有更小的
枚举值会被优先执行。从FilterScope的定义可以得到这样的结论:对于具有相同Order属性值的多个Filter,应用在Controller
上的Filter比应用在Action方法上的Filter具有更高的执行优先级,而一个全局的Filter的执行优先级又高于基于Action的Filter。
二、二、FilterProvider
Filter的提供机制与之前我们介绍的基于ModelBinder和ModelValidator的提供机制比较类似,均是通过相应的Provider来提供
的。提供筛选器的FilterProvider实现了接口IFilterProvider,如下面的代码片断所示,该接口定义了唯一的方法GetFilters根据
指定的Controller上下文和用于描述目标Action的ActionDescriptor对象获取一个Filter对象集合。
public interface IFilterProvider
{
IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor);
}
资源评论
weixin_38592548
- 粉丝: 4
- 资源: 911
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- NetBox2及大疆智图影像缓存lrc模板
- 123456789自用解答題
- JAVA的SpringBoot个人理财系统源码数据库 MySQL源码类型 WebForm
- 全屋智能全球市场报告:2023年中国全屋智能行业市场规模已达到3705亿元
- 康复医疗全球市场报告:2023年年复合增长率高达18.19%
- 微信小程序期末大作业-商城-2024(底部导航栏,轮播图,注册登录,购物车等等)
- 碘产业全球市场报告:2023年全球碘需求量已攀升至约3.86万吨
- 基于CNN、RNN、GCN、BERT的中文文本分类源码Python高分期末大作业
- 最新源支付Ypay系统开心稳定最新免授权源码,三平台免挂免签约支付
- 6-测试安全风险知情告知书(2).docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功