我正在尝试实现聊天应用程序。用户应该能够向特定用户发送消息。为此,我需要将用户名映射到他们的connectionID。
我的客户端正在使用自定义身份验证用户名存储在会话["用户"]中。因此,我没有将用户名存储在Context.User.Identity.Name中,这是SignalR通常从中获取用户名的地方。
我如何获取登录用户的用户名,以便将其映射到Context.ConnectionID?
以下是公共类ChatHub的一些示例实现:我在网上找到的Hub。
private readonly static ConnectionMapping<string> _connections =
new ConnectionMapping<string>();
public void SendChatMessage(string who, string message)
{
string name = Context.User.Identity.Name;
foreach (var connectionId in _connections.GetConnections(who))
{
Clients.Client(connectionId).addChatMessage(name + ": " + message);
}
}
public override Task OnConnected()
{
string name = Context.User.Identity.Name;
_connections.Add(name, Context.ConnectionId);
return base.OnConnected();
}
答案 0 :(得分:3)
使用查询字符串传递您的用户名。
<强>客户端强>
首先设置查询字符串
对于自动生成的代理
$.connection.hub.qs = { 'username' : 'anik' };
对于手动代理
var connection = $.hubConnection();
connection.qs = { 'username' : 'anik' };
然后启动集线器连接
服务器强>
public override Task OnConnected()
{
var username= Context.QueryString['username'];
return base.OnConnected();
}