.NET7中GuildService的IHttpContextAccessor返回null问题解决
.NET7中HttpContextAccessor在服务中返回Null的问题排查与解决
问题场景
在.NET7项目中,尝试通过HttpContextAccessor从请求头的Token中获取用户ID,已在Program.cs中完成服务注册:
builder.Services.AddScoped<IWardrobeService, WardobreService>(); builder.Services.AddScoped<IGuildService, GuildService>(); builder.Services.AddHttpContextAccessor();
出现的异常情况:
WardrobeService中可正常通过HttpContextAccessor获取用户IDGuildService中调用GetCurrentCharacter()时,_httpContext.HttpContext始终返回Null,导致GetCurrentUserId()报错- 尝试过重写
GuildService、在GuildService中调用WardrobeService,均无法解决问题
问题原因与解决
问题已解决,核心原因是:调用GuildService的控制器未添加[Authorize]特性,而调用WardrobeService的控制器已添加该特性。
当控制器未标记[Authorize]时,请求不会经过认证中间件处理,此时HttpContext中不会初始化用户相关的上下文信息,HttpContextAccessor也就无法获取到有效的HttpContext实例。给对应控制器添加[Authorize]特性后,请求经过认证流程,HttpContext即可正常被访问。
内容的提问来源于stack exchange,提问作者Pedroock
相关产品推荐
相关产品推荐

