ASP.NET Core自定义Authorization Filter运行时无法匹配构造函数报错如何解决
问题根因
你遇到的构造函数匹配错误和Startup.cs配置无关,问题出在RoleRequirementAttribute的Arguments赋值逻辑上:TypeFilterAttribute的Arguments属性需要传入构造函数所有参数组成的object数组,你当前直接将string[]类型的角色列表赋值给Arguments,框架会误以为你要给Filter的构造函数传入和数组长度相等的N个独立string参数,和你实际定义的「单个string[]参数」的构造函数不匹配,因此抛出找不到合适构造函数的异常。
修复方案
仅需修改RoleRequirementAttribute的代码,把角色数组作为单个参数包裹在object数组中即可:
public class RoleRequirementAttribute : TypeFilterAttribute { public RoleRequirementAttribute(string[] roleNames) : base(typeof(RoleRequirementFilter)) { // 将角色数组作为单个构造参数传入 Arguments = new object[] { roleNames }; } }
补充说明
你不需要在Startup.cs中额外注册RoleRequirementFilter服务,TypeFilterAttribute会自动从DI容器中解析依赖并完成Filter的实例化。
内容的提问来源于stack exchange,提问作者Soheil
相关产品推荐
相关产品推荐

