您好我正在使用angular 4和JWT构建AspNetCore 2 WebApi应用程序
我的问题的广义定义是我无法在我的控制器之外访问HttpContext.User
。
我知道这是设计原因,.net为此提供了IHttpContextAccessor
。我也知道在R2 IHttpContextAccessor
中默认情况下不再注册,并且它应该注册为单例。这里有一点我的startup.cs
1.) services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
2.) services.AddSignalR();
3.) services.AddTransient<ClaimsPrincipal>(s => s.GetService<IHttpContextAccessor>().HttpContext.User);
4.) services.AddTransient<UserResolverService>();
你可以看到我尝试过一些东西,
对于一个我显然只是添加一个IHttpContextAccessor
我试图像这样注入(打破,HttpContext为null)
private readonly ClaimsPrincipal _caller;
public ChatHub(IHttpContextAccessor accessor)
{
_caller = accessor.HttpContext.User;
}
我尝试将其放入服务中,然后像这样注入服务
private string _userName;
public ChatHub(UserResolverService userService)
{
_user = userService.GetUser();
}
这里是我提到的服务(并且还注册为你可以看到上面的内容)
public class UserResolverService
{
private readonly IHttpContextAccessor _context;
public UserResolverService(IHttpContextAccessor context)
{
_context = context;
}
public string GetUser()
{
return _context.HttpContext.User.Identity.Name;
}
}
这只是我在堆栈溢出时发现的东西,似乎什么都不做
services.AddTransient<ClaimsPrincipal>(s =>
s.GetService<IHttpContextAccessor>().HttpContext.User);
我有点新发帖,我不想偏离主题但是如果它帮助任何人我真正想要做的就是将用户映射到signalR中的连接,我有来自github的chatSample({{3} }) 除了事实
之外,在我的应用程序中完全完美地工作Context.User.Identity.Name
为空。我指的是上下文
HubCallerContext Hub.Context
然而,我不认为这是signalR的事实很重要。我应该能够注入HttpContext并获取我需要的用户信息吗?
我错过了什么?第2天关于这个问题疯了