是否应避免使用IHttpContextAccessor?DI服务中如何获取用户信息
在DI服务中使用IHttpContextAccessor获取用户信息的疑问与实践
关于在依赖注入(DI)服务中通过IHttpContextAccessor获取用户信息的资料有很多,但该接口的官方提示明确要求谨慎使用:
应谨慎使用此接口。它依赖AsyncLocal,会对异步调用产生负面影响,还会引入对“环境状态”的依赖,增加测试难度。
我在想,会不会有人认为直接通过这种方式获取用户信息是代码坏味道?那我是不是应该改为从控制器层向下传递用户信息?或者有没有办法通过中间件来实现类似需求?
更新:实现示例代码
public class CurrentUserNameProvider : ICurrentUserNameProvider { private readonly IHttpContextAccessor _httpContextAccessor; public CurrentUserNameProvider(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } /// <summary> /// 获取当前用户名 /// </summary> /// <returns></returns> public string GetCurrentUserName() { var user = _httpContextAccessor.HttpContext?.User; return user.Identity.Name; } }
内容的提问来源于stack exchange,提问作者JamesB
相关产品推荐
相关产品推荐

