雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

IL源码解读,理解MVC里面Filter这个AOP的实现原理

2024-09-09 39

MVC的请求是由Action响应的,Action是一个实例方法,得先实例化控制器再InvokeAction,MVCHandler完成Controller的实例化,控制器的实例+Action名称交给ControllerActionInvoker,InvokeAction找出Filter,做各种检查,如果Result不为空就直接Result,如果为空继续执行Action。

IL解读MVCHandler

ProcessRequest里实例化控制器,controller.Excute完成方法调用。

子类里执行ExcuteCore,负责调用方法。ControllerActionInvoker的InvokeAction执行Action方法。

找出Descriptor描述的特性,Filter,先检查Filter,如果有Result就直接返回Result,如果没有Result再执行Action。

MVC再调用方法前检查了特性,满足某个特性就先执行特性的东西,这样就等同在方法前加入了新的逻辑。这就是AOP的效果。

示例:权限验证AOP实现[Authorize]

OnAuthorization这个方法会发生在Action执行之前。效果:在没有修改Action,Action执行前,能自动取执行AuthorizeAttribute的方法。

1 标记到Action,Action注册,只对Action生效

2 Controller注册,对Controller生效

3 全局注册,在Global注册FilterConfig

[AllowAnonymous]标记匿名特性,全局检测需要在AuthorizeAttribute里处理支持,方法如下

 if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))

    return;

if (filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))

    return;

更新于:2个月前
赞一波!

文章评论

评论问答