C# 如何从控制器获取连接id?
我有一个中心:C# 如何从控制器获取连接id?,c#,signalr,C#,Signalr,我有一个中心: public class NotificationHub : Hub<INotificationHub> { private readonly static ConnectionMapping<User> connections = new ConnectionMapping<User>(); public override Task OnConnected() { var user = GetUser
public class NotificationHub : Hub<INotificationHub>
{
private readonly static ConnectionMapping<User> connections = new ConnectionMapping<User>();
public override Task OnConnected()
{
var user = GetUser();
connections.Add(user, Context.ConnectionId);
Groups.Add(Context.ConnectionId, user.GroupId.ToString());
return base.OnConnected();
}
public string GetConnectionId(User user)
{
return connections.GetConnections(user).First();
}
private User GetUser() {}
}
公共类通知中心:中心
{
私有只读静态ConnectionMapping connections=新建ConnectionMapping();
已连接的公用覆盖任务()
{
var user=GetUser();
添加(用户,上下文,连接ID);
Add(Context.ConnectionId,user.GroupId.ToString());
返回base.OnConnected();
}
公共字符串GetConnectionId(用户)
{
返回connections.GetConnections(user.First();
}
私有用户GetUser(){}
}
在控制器中,我正在做:
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.Groups(user.GroupId.ToString()).Notify();
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.Groups(user.GroupId.ToString()).Notify();
但是上面的内容会发送给组中的所有用户。如何将其发送给当前发出请求的用户
注:
我正在从中心外部调用该方法。要向特定客户端发送特定更新,您需要connectionId。正如你已经知道的那样,这个小组是为了广播 由于您是在单独的控制器中从集线器外部访问,因此您无权访问当前的Context.ConnectionId 但是,由于您确实拥有hubContext,如果您可以获得要向其发送更新的用户的connectionId,则可以使用以下方式向特定连接发送更新:
context.Clients.Client(connectionid).Notify()
在您的情况下,将GetConnectionId设置为静态:
public static string GetConnectionId(User user)
{
return connections.GetConnections(user).First();
}
然后,向用户的特定连接发送通知:
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.Groups(NotificationHub.GetConnectionId(user)).Notify();
var context=GlobalHost.ConnectionManager.GetHubContext();
context.Clients.Groups(NotificationHub.GetConnectionId(用户)).Notify();
这应该行。现在我明白你的要求,但恐怕这是在可能的重复之前提出的