.Net Core SignalR:从IHubContext发送给除用户以外的用户(注入控制器)

时间:2017-11-06 19:30:17

标签: c# asp.net-core-mvc asp.net-core-signalr

为了在控制器中使用注入的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以便仅通知其他用户?

1 个答案:

答案 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发送时会有更好的方式。