Javascript signar客户端如何在启动连接时设置用户?

Javascript signar客户端如何在启动连接时设置用户?,javascript,c#,signalr,signalr-hub,signalr.client,Javascript,C#,Signalr,Signalr Hub,Signalr.client,服务器端: public override Task OnConnected() { var connectionId = Context.ConnectionId; var user = Context.User.Identity.Name; // Context.User is NULL return base.OnConnected(); } 客户端(控制台项目中): 当客户端连接到服务器时,我想知道userName和connectionId之间的映射,但是Con

服务器端:

public override Task OnConnected()
{
    var connectionId = Context.ConnectionId;
    var user = Context.User.Identity.Name; // Context.User is NULL
    return base.OnConnected();
}
客户端(控制台项目中):


当客户端连接到服务器时,我想知道userName和connectionId之间的映射,但是
Context.User
为空。如何在客户端设置此值?

使用查询字符串传递用户名


客户端

var connection = new HubConnection(<YOUR_URL>);
connection.Headers.Add("username", "maria");
var myHub = connection.CreateHubProxy("MyHub");
第一组查询字符串

string url = @"http://localhost:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("TestHub");
connection.qs = { 'username' : 'anik' };
connection.Start().Wait();
服务器

public override Task OnConnected()
{
    var username= Context.QueryString['username'];
    return base.OnConnected();
}
public override Task OnConnected()
{
  var connectionId = Context.ConnectionId;
  var username= Context.QueryString["username"]; //here you will receive naveed as username

  return base.OnConnected();
}
public override Task OnConnectedAsync()
    {
        var  username = Context.GetHttpContext().Request.Query["username"];
        // username = xxxx
        return base.OnConnectedAsync();
    }
string username = Context.Headers.Get("username");
Console.WriteLine("New client connection - " + username);
试试这个

客户端(C#)


使用asp.netcore 2.1中的queryString尝试此操作:

客户端(javascript) 在url后面设置查询字符串,如下所示:

var connection = new signalR.HubConnectionBuilder().withUrl("http://localhost:10499/chathub?username=xxxx").build();
connection.start().then(function ()
{
    // do some thing here ...
}).catch(function (err)
{
    console.error(err.toString());
});
.
.
.
服务器

public override Task OnConnected()
{
    var username= Context.QueryString['username'];
    return base.OnConnected();
}
public override Task OnConnected()
{
  var connectionId = Context.ConnectionId;
  var username= Context.QueryString["username"]; //here you will receive naveed as username

  return base.OnConnected();
}
public override Task OnConnectedAsync()
    {
        var  username = Context.GetHttpContext().Request.Query["username"];
        // username = xxxx
        return base.OnConnectedAsync();
    }
string username = Context.Headers.Get("username");
Console.WriteLine("New client connection - " + username);

客户端

var connection = new HubConnection(<YOUR_URL>);
connection.Headers.Add("username", "maria");
var myHub = connection.CreateHubProxy("MyHub");

您使用什么样的身份验证?如果您使用ASP.NET内置身份验证,它应该可以正常工作。我没有使用任何类型的身份验证。。。我刚刚构建了一个新的空项目,并从NuGetWell下载了signalr。您需要启用身份验证,然后启用上下文。用户只需在使用.NET客户端时工作,还需要在客户端hubConnection上设置credentails。Credentials=CredentialCache.DefaultCredentials(此代码适用于Windows身份验证)如果您正在使用Azure Signal服务,请参阅,虽然这可能会回答问题,但您需要提及并解释更改以及更改原因。这将有助于OP了解和了解更改的原因以及我在何处获得的帮助,我将非常感激。很多“HubConnection”不包含“qs”的定义,并且找不到接受“HubConnection”类型的第一个参数的可访问扩展方法“qs”(您是否缺少using指令或程序集引用?)我已经并将非常感谢您的帮助。我认为这是最能接受的帮助。其他的我都试过了,但都没用。这需要加倍努力+