在SignalR Hub中验证用户时GetHttpContext()为null

在SignalR Hub中验证用户时GetHttpContext()为null,signalr,signalr-hub,Signalr,Signalr Hub,我正在尝试在信号器中心内使用Asp.Net标识创建并登录用户,如下所示: public string CreateUser(string username, string password) { var userStore = new UserStore<IdentityUser>(); var manager = new UserManager<IdentityUser>(userStore); var user = new IdentityU

我正在尝试在信号器中心内使用Asp.Net标识创建并登录用户,如下所示:

public string CreateUser(string username, string password)
{
    var userStore = new UserStore<IdentityUser>();
    var manager = new UserManager<IdentityUser>(userStore);

    var user = new IdentityUser() { UserName = username };
    IdentityResult result = manager.Create(user, password);

    if (result.Succeeded)
    {
        var authenticationManager = Context.Request.GetHttpContext().GetOwinContext().Authentication;
        var userIdentity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
        authenticationManager.SignIn(new AuthenticationProperties() { }, userIdentity);
        return "Success";
    }
    else
    {
        var authenticationManager = Context.Request.GetHttpContext().GetOwinContext().Authentication;
        return "Failed: "+result.Errors;
    }
}
publicstringcreateuser(字符串用户名、字符串密码)
{
var userStore=new userStore();
var-manager=新的UserManager(userStore);
var user=new IdentityUser(){UserName=UserName};
IdentityResult result=manager.Create(用户、密码);
if(result.successed)
{
var authenticationManager=Context.Request.GetHttpContext().GetOwinContext().Authentication;
var userIdentity=manager.CreateIdentity(用户,DefaultAuthenticationTypes.ApplicationOkie);
SignIn(新的AuthenticationProperties(){},userIdentity);
返回“成功”;
}
其他的
{
var authenticationManager=Context.Request.GetHttpContext().GetOwinContext().Authentication;
return“Failed:+result.Errors;
}
}
但是GetHttpContext()总是空的,有人能解释一下原因吗


从集线器中调用SignIn方法的最佳方式是什么?

这里有一个古老的问题,但是集线器是一个开放的交流渠道,因此使用表单auth和identity这样的过程是行不通的。没有对设置标题的响应,也没有设置Cookie的方法。你需要一个定期的HTTP交换。

嗨,谢谢你的评论,是的,这是很难解决的。我最终使用了一个owin模块,该模块基本上执行http基本身份验证-这是当时推荐的执行此操作的方法。我不知道为什么要通过持久连接进行身份验证。这样做似乎没有任何好处。在持久连接上使用集线器的原因是因为只有集线器提供客户端到服务器的冷RPC调用-如果我错了,请纠正我。好的,但这与auth有什么关系?我的意思是,HTTP是无状态的,通常你不想打开连接。signar的用例主要是服务器端与客户机/浏览器对话,而客户机/浏览器通常不会监听。