SignalR Client 开始连接时如何设置用户?
Posted
技术标签:
【中文标题】SignalR Client 开始连接时如何设置用户?【英文标题】:SignalR Client How to Set user when start connection? 【发布时间】:2015-06-13 02:25:27 【问题描述】:服务器端:
public override Task OnConnected()
var connectionId = Context.ConnectionId;
var user = Context.User.Identity.Name; // Context.User is NULL
return base.OnConnected();
客户端(在控制台项目中):
IHubProxy _hub;
string url = @"http://localhost:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("TestHub");
connection.Start().Wait();
当客户端连接到服务器时,我想知道userName和connectionId之间的映射,但是Context.User
是NULL。如何在客户端设置这个值?
【问题讨论】:
您使用哪种身份验证?如果您使用 ASP.NET 内置身份验证,它应该可以正常工作 我没有使用任何类型的身份验证...我只是构建了一个新的空项目并从 NuGet 下载信号器 你需要启用身份验证,然后 Context.User 才能工作 由于您使用.NET客户端,您还需要在客户端hubConnection.Credentials = CredentialCache.DefaultCredentials上设置credentails(此代码适用于Windows身份验证) 如果您使用的是 Azure SignalR 服务,请参阅 How to use SignalR to send data to a specific user? 【参考方案1】:用 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 OnConnectedAsync()
var username = Context.GetHttpContext().Request.Query["username"];
// username = xxxx
return base.OnConnectedAsync();
【讨论】:
我有a similar question,非常感谢您的帮助 这是我最能接受的一个。我尝试了所有其他方法,但无济于事。这需要一个双 +【参考方案2】:使用查询字符串传递您的用户名。
客户
首先设置查询字符串
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();
【讨论】:
我有 a similar question 并且非常感谢任何帮助 'HubConnection' 不包含 'qs' 的定义,并且找不到接受“HubConnection”类型的第一个参数的可访问扩展方法“qs”(您是否缺少 using 指令或程序集参考?) @HOÀNGLONG 旧 ASP.NET SignalR 还是新 ASP.NET Core SignalR?【参考方案3】:客户
var connection = new HubConnection(<YOUR_URL>);
connection.Headers.Add("username", "maria");
var myHub = connection.CreateHubProxy("MyHub");
服务器
string username = Context.Headers.Get("username");
Console.WriteLine("New client connection - " + username);
【讨论】:
虽然这可能会回答问题,但您需要提及并解释更改以及更改原因。这将有助于 OP 了解并了解进行更改的原因和位置【参考方案4】:试试这个
客户端 (C#)
//Enter query string
var querystringData = new Dictionary<string, string>();
querystringData.Add("username", "naveed");
IHubProxy _hub;
string url = @"http://localhost:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("TestHub");
connection.Start().Wait();
connection.Start().Wait();
服务器
public override Task OnConnected()
var connectionId = Context.ConnectionId;
var username= Context.QueryString["username"]; //here you will receive naveed as username
return base.OnConnected();
【讨论】:
以上是关于SignalR Client 开始连接时如何设置用户?的主要内容,如果未能解决你的问题,请参考以下文章