从Controller调用SignalR Core Hub方法时的连接ID

这是另一个问题和答案的后续行动。 从控制器调用HubContext.Clients.CallerHubContext.Clients.Others什么影响? 我看到它取决于连接ID 。 在这种情况下它会有什么价值?

如果连接ID(以及CallerOthers )无效,那么(从控制器操作中)我如何获得可以与HubContext.Clients方法一起使用的连接ID(对于当前调用Web API的客户端)?

从控制器调用HubContext.Clients.CallerHubContext.Clients.Others什么影响? 我看到它取决于连接ID。 在这种情况下它会有什么价值?

HubContext.Clients (类型为HubClients )既没有.Caller也没有.Caller

IHubContext访问它们是IHubContextCallerOthers都依赖于知道哪个客户端是调用者。当你在IHubContext中时,我们不知道,甚至可能没有当前的调用者,因为你可能在MVC控制器动作等
– aspnet / SignalR#2274(评论)

(从控制器操作中)我如何获得可以与HubContext.Clients的方法一起使用的连接ID(对于当前调用Web API的客户端)?

无法知道当前调用者是谁来自IHubContext
– aspnet / SignalR#2274(评论)

使用组和用户是缓解这种情况的一种方法。

如果您可以访问发起操作的用户的用户ID,则可以使用.Users(userId)向该用户的所有连接发送消息。同样,您将SignalR连接添加到组并发送给该组group使用.Group(groupName)
– aspnet / SignalR#2274(评论)

或者,在客户端获取连接ID。

您可以在调用API的客户端上获取连接ID,然后将其发送到控制器。

毂:

 public string GetConnectionId() { return Context.ConnectionId; } 

客户:

 hub.invoke('getConnectionId') .then(function (connectionId) { // Send the connectionId to controller });