田敏
返回博客列表
技术

ASP.Net Core 过滤器

田敏
2023-12-241 分钟阅读
CodingTipsC#

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)

版权协议:MIT返回列表