今天在项目(https://github.com/AjuPrince/Aju.Carefree)作登录权限时,用到了Filter,现将Filer的使用作如下记录。html
Filter俗称过滤器,它的做用是在Action方法执行先后作一些处理。它在Mvc Action 管道中运行,因此也能够叫作过滤器管道。git
Authorization Filter -> Resource Filter -> Action Filter -> Exception Filter -> Result Filtergithub
在.Net Core MVC 中新增了异步过滤器,若是提供了异步和同步过滤器,那么将执行异步过滤器,同步过滤器将不会执行。 mvc
(图片来自 John Wu 的博客)异步
Authorization Filter 是这几种Filter中优先级最高的,一般用于验证请求的合法性,俗称 受权过滤器。async
Resource Filter 是第二个被执行的,Model Binding以前执行,一般用于对Model加工处理,俗称 资源过滤器ide
Action Filter 这个过滤器是最经常使用到的过滤器,在调用Action方法先后执行,在Model Binding以后执行,在使用上没什么特别注意的,俗称 方法过滤器学习
Exception Filter 经常用于应用程序执行异常是记录日志spa
Result Filter 当Action 执行完成后,最终会执行的Filter,经常用于处理 Action 执行结果3d
Filter 的注册有两种方式,一种是全局注册,另外一种的区域注册
public class HandleLoginAsyncAttribute : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { context.HttpContext.Session.TryGetValue("Aju_Prince_OperatorProvider_20190708", out var result); if (result == null) { context.Result = new RedirectResult("/Login/Index"); return; } await next.Invoke(); } }
参考:
(本人坚信:学习是由浅到深的过程)
不喜勿喷!谢谢!
GitHub地址: https://github.com/AjuPrince/Aju.Carefree