.net core 批量拦截器(自带Filter,Castle动态代理)

前言

本篇介绍.net core批量拦截器的用法,自带Filter和Castle动态代理都有各自适用的场景;

1、.net core 自带Filter

1)添加全局Filter,比如错误处理、日志记录等;
(错误处理Filter)

(日志记录) 

(注册全局拦截器)
 

注册完全局拦截器后,如果某些请求不需要上面拦截器时,可以通过定义一个属性的形式,在拦截器中判断该请求方法上是否带有该属性,从而判断中是否要拦截;拦截逻辑在上图中的LoggerFilter中的IsNoNeedLogger方法来判断;

 

2)添加局部Filter(非批量添加,但是该方法比常规用法简洁并实用)
(定义属性,并继承拦截接口)

 (定义类,并继承TypeFilterAttribute) 

 (使用时,以属性的形式并可传参)

 

   

2、Castle动态代理(结合Autofac使用)
引入包Autofac.Extras.DynamicProxy,Castle.Core等,定义拦截器;

定义不需要拦截的地方 (在方法上标注这个属性时,代表不需要拦截,拦截逻辑如上图)

 在Autofac的注册方法中,给某些局部类上批量添加拦截器;

 

 

 总结:

1)在适用场景上,自带Filter适合添加全局拦截器,以及某个具体请求方法上已属性的形式添加拦截器,均是在Controller层的;Castle动态代理适合添加局部性的批量拦截器,在接口层(或者说实现层),常规用法不是在Controller层;
2)当你既有自带Filter添加的全局拦截器以及Castle动态代理的拦截器,当一个请求过来时,在执行顺序上来说,会先在Controller层执行自带Filter的全局拦截器方法,然后在接口层分别执行每个被调到的接口所添加的拦截器方法;
3)关于TypeFilter和ServiceFilter,当使用ServiceFilter时,需要提前注册该拦截器,而已无法传参,所以本篇采用的是TypeFilter,由于它无法注册,而且可以传参,虽然ServiceFilter可以在注册时决定使用任意的生命周期,比如Scope,来达到不用每次重新实例化,但是TypeFilter也有IsReusable的参数来弥补;
4)关于Autofac批量注册,可以看上一篇文章  https://www.cnblogs.com/willardzmh/articles/14393696.html

 

posted @   willardzmh  阅读(1630)  评论(2编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示