小白开学Asp.Net Core《五》
—— 使用.Net Core MVC Filter
一、简介
今天在项目(https://github.com/AjuPrince/Aju.Carefree)做登陆权限时,用到了Filter,现将Filer的使用做以下记录。
二、Filter 简介Filter俗称过滤器,它的作用是在Action方法执行前后做一些处理。它在Mvc Action 管道中运行,所以也可以叫做过滤器管道。
三、Filter的执行顺序
Authorization Filter -> Resource Filter -> Action Filter -> Exception Filter -> Result Filter
在.Net Core MVC 中新增了异步过滤器,如果提供了异步和同步过滤器,那么将执行异步过滤器,同步过滤器将不会执行。
(图片来自 John Wu 的博客)
Authorization Filter
Authorization Filter 是这几种Filter中优先级最高的,通常用于验证请求的合法性,俗称 授权过滤器。
Resource Filter
Resource Filter 是第二个被执行的,Model Binding之前执行,通常用于对Model加工处理,俗称 资源过滤器
Action Filter
Action Filter 这个过滤器是最常用到的过滤器,在调用Action方法前后执行,在Model Binding之后执行,在使用上没什么特别注意的,俗称 方法过滤器
Exception Filter
Exception Filter 常常用于应用程序执行异常是记录日志
Result Filter
Result Filter 当Action 执行完成后,最终会执行的Filter,常常用于处理 Action 执行结果
四、Filter类型在Filter管道中的交互方式五、Filter 的注册
Filter 的注册有两种方式,一种是全局注册,另一种的区域注册
全局注册是在Startup.cs 中进行注册。注册后用于所有的Request
区域注册是在Controller或者Action 上面加上[TypeFilter(type)]
六、项目案例(区域)定义ActionFilter:
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(); } }