ASP.NET Core Web API自定义属性如何传递参数?
解决自定义授权属性注册后无法解析字符串依赖的问题
问题场景
要实现一个带参数的自定义权限校验属性,期望在API路由上用[SecurityFunctionFilter("GETORDERS")]的形式标记,用来在进入路由前检查用户权限。具体操作:
- 创建了继承
Attribute并实现IAuthorizationFilter接口的过滤器类,通过构造函数接收权限标识字符串参数 - 在
OnAuthorization方法中编写权限校验逻辑 - 在
Program.cs中将该过滤器注册为Scoped服务
运行时在builder.Build()环节报错,提示无法解析string类型服务以激活SecurityFunctionFilter
解决方案
直接从Program.cs的服务注册代码中移除SecurityFunctionFilter的注册项即可。
原因说明
这种基于Attribute的过滤器是直接通过特性标记的方式实例化的,并不依赖DI容器来创建实例。如果强行将其注册到DI,容器会尝试解析构造函数中的字符串参数,但这个参数是在标记特性时传入的固定值,并非DI容器中的服务,因此会触发解析失败的错误。
内容的提问来源于stack exchange,提问作者sdman02
相关产品推荐
相关产品推荐

