IL源码解读,理解MVC里面Filter这个AOP的实现原理
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个月前相关文章
- .NET9在ASP.NET MVC有什么更新?
- ASP.NET MVC与Web Forms的区别
- 【说站】Filter在java中的过滤
- MVC跨域问题 Response for preflight has invalid HTTP status code 405
- _ViewStart.cshtml文件的作用
- .NET Core MVC应用程序创建教程
- ASP.NET MVC4/5实现asp-append-version为css/js带上版本号
- ASP.NET Core MVC 添加Area和Route配置
- ASP.NET MVC View视图 .cshtml文件中创建方法
- ASP.NET Core MVC/RazorPage使用Anti-Forgery Tokens进行XSRF/CSRF防护
- .NET Core MVC判断是否是ajax请求
- .NET MVC ViewBag ViewData Mmodel怎么选择?
- .NET Core MVC 获取UrlReferer
- .NET Core MVC页面输出中文被编码了
- 解释一下MVC(Model-View-Controller)和MVVM(Model-View-ViewModel)模式,并比较它们之间的区别。
- vscode C# MVC脚手架
- 使用VSCode开发.NET MVC常用插件
- JavaScript Array 对象高阶方法 some、filter、indexOf
- .NET MVC和Razor Page对比
- .NET MVC项目中使用node.js