ASP.Net Core 过滤器
1、ASP.Net Core 过滤器 是什么?
在ASP.NET Core中,过滤器是一种机制,允许你在处理HTTP请求的不同阶段注入自定义逻辑。这些阶段包括全局阶段(全局过滤器)以及特定于控制器和动作方法的阶段(控制器和动作过滤器)。过滤器的目的是在请求的不同处理阶段执行一些逻辑,例如验证、日志记录、性能测量等。
过滤器管道在HTTP请求管道中的位置

管道交互

-
Authorization Filters(授权过滤器):该过滤器位于所有过滤器的顶端,首先被执行。授权过滤器用于确认请求用户是否已授权,如未授权,则可以将管道短路,禁止请求继续传递。 -
Resource Filters(资源过滤器):当授权通过后,可以在过滤器管道的其他阶段(如模型绑定)之前和之后执行自定义逻辑,可以用来实现缓存。public class CtmResourceFilterAttributecs : Attribute, IResourceFilter { private Dictionary<string, Object> _dicCacahe = new Dictionary<string, object>(); public void OnResourceExecuted(ResourceExecutedContext context) { string key = context.HttpContext.Request.Path; _dicCacahe[key] = context.Result as ObjectResult; } public void OnResourceExecuting(ResourceExecutingContext context) { string key = context.HttpContext.Request.Path; if (_dicCacahe.ContainsKey(key)) { context.Result =(ObjectResult) _dicCacahe[key]; } } } -
Exception Filters(异常过滤器):当Controller创建时、模型绑定、Action Filters和Action执行中抛出未处理的异常时,异常过滤器可以捕获并进行处理,需要注意的是,在此之前,响应正文还未被写入,这意味着你可以设置返回结果。public class CtmExceptionFilterAttributecs : Attribute, IExceptionFilter { public void OnException(ExceptionContext context) { } } -
Action Filters(操作过滤器):在调用Action之前和之后执行自定义逻辑。通过操作过滤器,可以修改要传入Action的参数,也可以设置或修改Action的返回结果。另外,其也可以首先捕获到Action中抛出的未处理异常并进行处理。public class CtmActionFilterGlAttribute : Attribute, IActionFilter { public void OnActionExecuted(ActionExecutedContext context) { } public void OnActionExecuting(ActionExecutingContext context) { } } -
Result Filters(结果过滤器):仅当Action的执行未抛出异常,或Action Filter处理了异常时,才会执行结果过滤器,允许你在操作结果执行之前和之后执行自定义逻辑。
2、过滤器的的作用域
参考链接:理解ASP.NET Core - 过滤器(Filters) - xiaoxiaotank - 博客园 (cnblogs.com)