33

我在我的 ASP.NET Web 应用程序中使用 SignalR。在这里,我使用IHubContext. 我需要获取当前用户的连接 ID,以便仅向当前用户发送消息。如何在客户端获取连接 ID?

4

7 回答 7

56

是的。您可以使用$.connection.hub.id.

于 2013-10-21T01:58:10.613 回答
2

这对我有用:

var hub = $.connection.someHub;
// After connection is started
console.log(hub.connection.id);
于 2017-11-26T14:57:02.050 回答
2

还有另一种方法,您可以通过调用方法将连接 ID 从集线器获取到控制器中,hub然后您可以从那里返回所需ID的。

控制器代码

var HubContext = GlobalHost.ConnectionManager.GetHubContext<"ChatHub">(); //`ChatHub` can be your Hub Name
ChatHub HubObj= new ChatHub();
var RequiredId= HubObj.InvokeHubMethod();

集线器内的代码

public string InvokeHubMethod()
{
     return "ConnectionID"  //ConnectionID will the Id as string that you want outside the hub
}
于 2017-08-29T08:54:09.563 回答
2

对于 .NET 客户端,它位于Connection对象上,由HubConnection.

Connection.ConnectionId

所以通常可以在

hubConnection.ConnectionId
于 2017-02-04T00:50:37.503 回答
1

服务器:Context.ConnectionId => "dJSbEc73n6YjGIhj-SZz1Q"

客户 :

   this._hubConnection
      .start()
      .then(() => {     
         var hub = this._hubConnection ;
         var connectionUrl = hub["connection"].transport.webSocket.url ;
         console.log(connectionUrl);

=> wss://localhost:5001/notify?id=dJSbEc73n6YjGIhj-SZz1Q

你可以提取id。(远不是一个完美的解决方案)

于 2018-11-10T16:32:36.110 回答
0

使用以下代码对我有用。

在枢纽类中。

 public static ConcurrentDictionary<string, MyUserType> MyUsers = new ConcurrentDictionary<string, MyUserType>();



    public override Task OnConnected()
    {
        MyUsers.TryAdd(Context.User.Identity.Name, new MyUserType() { ConnectionId = Context.ConnectionId,UserName=Context.User.Identity.Name });
        string name = Context.User.Identity.Name;

       Groups.Add(Context.ConnectionId, name);

        return base.OnConnected();
    }

在中心类文件中创建以下类

public class MyUserType
{
    public string ConnectionId { get; set; }
    public string UserName { get; set; }

}

在中心类之外。

  var con = MyHub1.MyUsers;
       var conId =con.Select(s => s.Value).Where(s => s.UserName == User.Identity.Name).FirstOrDefault();
于 2017-05-09T21:29:08.203 回答
0

要获取完整的中心网址,您可以说:hubConnection.connection.transport.webSocket.url

这类似于:"wss://localhost:1234/myHub?id=abcdefg"

正则表达式获取 ID:

var r = /.*\=(.*)/ var id = r.exec(url)[1]

于 2018-12-14T15:06:06.013 回答