有关C# .NET Core 过滤器的使用

embedded/2024/9/23 18:22:09/

想用一个过滤器实现特定接口的审核日志记录,结果报了错,看了看感觉有些基础要补,所以想记录下来

错误:

在属性过滤器中使用了依赖注入,结果在应用在控制层接口时报了传参的错

//过滤器
public class AuditRecordFilter: ActionFilterAttribute
{private readonly ISysAuditRecordService _sysAuditRecordService; // 注入日志服务/// <summary>/// 会话管理接口/// </summary>private readonly TokenManager _tokenManager;public AuditRecordFilter( ISysAuditRecordService sysAuditRecordService, TokenManager tokenManager){_sysAuditRecordService = sysAuditRecordService;_tokenManager = tokenManager;}
...

控制层:

原因:

ASP.NET Core 框架中的生命周期管理服务解析机制。

在 ASP.NET Core 中,依赖项是通过依赖注入容器(DI容器)来解析的。这个容器会自动为需要依赖的对象(如服务、仓储等)提供相应的实例。

理论上,这些依赖应该由 ASP.NET Core 的 DI 容器注入。但是,如果你直接在控制器方法上使用属性形式的 [AuditRecordFilter],由于它是编译时静态定义的,框架不会通过依赖注入自动解析这些服务。这就是为什么在使用某些属性过滤器时,会有依赖项无法解析的错误。

ASP.NET Core 的属性过滤器(例如 [AuditRecordFilter])在编译时就已经创建。也就是说,过滤器实例在 ASP.NET Core 依赖注入容器有机会参与之前就已经被创建,因此 DI 容器无法为过滤器的构造函数注入依赖项。这导致你看到的错误提示,表明无法解析 ISysAuditRecordService 等依赖。

错误的原因是: 使用属性过滤器时,过滤器实例化发生在编译时,而非运行时,框架不会自动为这些属性过滤器提供依赖项。

解决方案:

改为使用TypeFilter 或 ServiceFilter

二者实现的区别

这里我用了TypeFilter ,在具体的过滤器中不需要特别改什么

//控制层接口标注[TypeFilter(typeof(AuditRecordFilter),Arguments =new object[] {3})]

其中的Arguments可用过滤器的构造函数拿到,这个可做接口区别判断之类的功能,更灵活一些 。


http://www.ppmy.cn/embedded/112845.html

相关文章

Qt:懒汉单例(附带单例使用和内存管理)

前言 本文主要写懒汉单例以及单例的释放&#xff0c;网上很多教程只有单例的创建&#xff0c;但是并没有告诉我们单例的内存管理&#xff0c;这就很头疼。 正文 以下是两种懒汉单例的写法 1. 懒汉式单例&#xff08;多线程不安全&#xff0c;但是在单线程里面是安全的&…

Linux 监控I/O的状态

在进行 I/O 密集型操作时&#xff0c;可以通过多种工具来查看当前的 I/O 状态&#xff0c;获取与磁盘或文件系统相关的活动信息。这些工具可以帮助你监控 I/O 操作的性能&#xff0c;发现潜在的瓶颈或问题。 1. 使用 iostat 查看 I/O 负载 iostat 是一个常用的工具&#xff0…

关于RabbitMQ消息丢失的解决方案

RabbitMQ如何保证消息的可靠性传输 一、消息丢失的原因 1. 生产者端 网络问题&#xff1a; 原因&#xff1a;生产者与RabbitMQ服务器之间的网络连接不稳定或中断&#xff0c;导致消息在传输过程中丢失。解决方案&#xff1a;确保网络连接稳定&#xff0c;监控网络状态&#x…

[网络]https的概念及加密过程

文章目录 一. HTTPS二. https加密过程 一. HTTPS https本质上就是http的基础上增加了一个加密层, 抛开加密之后, 剩下的就是个http是一样的 s > SSL HTTPS HTTP SSL 这个过程, 涉及到密码学的几个核心概念 明文 要传输的真正意思是啥 2)密文 加密之后得到的数据 这个密文…

C语言编译原理

目录 一、C语言的编译过程 二、预处理 三、编译阶段 3.1 词法分析&#xff08;Lexical Analysis&#xff09; 3.2 语法分析&#xff08;Syntax Analysis&#xff09; 语法分析的主要步骤&#xff1a; 语法分析的关键技术&#xff1a; 构建AST&#xff1a; 符号表的维护…

【学习笔记】SSL密码套件之哈希

本篇将介绍TLS/SSL密码套件中常用的哈希算法&#xff0c;包括Poly1305、SHA384、SHA256、SHA、MD5 以上的哈希算法将作为 MAC 使用 MAC - Message Authentication Code 为批量数据提供了完整性&#xff08;Integrity&#xff09;以及真实性&#xff08;Authentication&#xf…

Unity3D 小案例 像素贪吃蛇 02 蛇的觅食

Unity3D 小案例 像素贪吃蛇 第二期 蛇的觅食 像素贪吃蛇 食物生成 在场景中创建一个 2D 正方形&#xff0c;调整颜色&#xff0c;添加 Tag 并修改为 Food。 然后拖拽到 Assets 文件夹中变成预制体。 创建食物管理器 FoodManager.cs&#xff0c;添加单例&#xff0c;可以设置…

LineageOS源码下载和编译(Xiaomi Mi 6X,wayne)

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 源码下载 LineageOS官网&#xff1a;https://lineageos.org/ LineageOS源码 github 地址&#xff1a;https://github.com/LineageOS/android LineageOS源码…