.NET 8中AuthenticationHandler无法注入IActionContextAccessor的解决方法
核心原因
IActionContextAccessor 不属于ASP.NET Core默认自动注册的服务,你的BokuApiAuthenticationHandler构造函数依赖了该服务,但依赖注入(DI)容器中未找到对应的实例,因此抛出依赖解析异常。
解决步骤
手动注册IActionContextAccessor服务
在项目的Program.cs(或传统Startup类的ConfigureServices方法)中,添加代码将该服务注册到DI容器:// 注册IActionContextAccessor的实现类 builder.Services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();若项目已调用
AddControllers,该方法会自动注册IActionContextAccessor,但保险起见仍可手动添加上述代码确保注册生效。验证构造函数注入的正确性
确认BokuApiAuthenticationHandler构造函数中,IActionContextAccessor的参数类型为Microsoft.AspNetCore.Mvc.Infrastructure.IActionContextAccessor,且参数名称无拼写错误。检查服务注册顺序
确保IActionContextAccessor的注册代码,在注册AuthenticationHandler的代码之前执行,DI容器需先知晓该服务的存在,才能完成后续的依赖注入。
优化建议
如果你的AuthenticationHandler并非必须依赖IActionContextAccessor,可考虑移除该依赖,直接通过HandleAuthenticateAsync方法中的Context属性获取HttpContext,以此获取请求上下文信息,减少不必要的服务依赖。
内容的提问来源于stack exchange,提问作者Ahmed Maamoun

