为了在控制器中使用注入的IHubContext时识别当前用户,我正在存储具有用户ID的组。 但是,我很难发送给其他人,因为我无法找到一种方法来找出要排除的连接ID。
我的中心
public override Task OnConnectedAsync()
{
Groups.AddAsync(Context.ConnectionId, Context.User.Identity.Name);
return base.OnConnectedAsync();
}
在我的控制器方法中,我可以为该用户调用方法:
await _signalRHub.Clients.Group(User.Identity.Name).InvokeAsync("Send", User.Identity.Name + ": Message for you");
IHubContext.Clients.AllExcept需要一个连接ID列表。如何获取已识别用户的连接ID以便仅通知其他用户?
答案 0 :(得分:0)
正如@Pawel所建议的那样,我现在正在对客户端进行重复数据删除工作(好吧,只要您的所有客户端都经过身份验证)。
private async Task Identification() => await Clients.Group(Context.User.Identity.Name).InvokeAsync("Identification", Context.User.Identity.Name);
public override async Task OnConnectedAsync()
{
await Groups.AddAsync(Context.ConnectionId, Context.User.Identity.Name);
await base.OnConnectedAsync();
await Identification();
}
JS与之相伴(缩写):
var connection = new signalR.HubConnection("/theHub");
var myIdentification;
connection.on("Identification", userId => {
myIdentification = userId;
});
现在,您可以在callerIdentification == myIdentification
connection.on("something", callerIdentification)
@Tester的评论让我有希望在通过IHubContext发送时会有更好的方式。