如何将SignalR集线器映射到带有参数的路径



我正在用Asp.Net Core&信号R。数据本身并不位于Asp.Net Core上,但必须向其他一些设备请求,这些设备将数据发送到Asp.Net核心服务器,然后服务器必须通过web套接字将数据返回给客户端。

我想对OnConnectedAsync做出反应,请求我的设备定期向Asp.Net Core发送一些数据。

但这意味着我的集线器必须能够知道我需要查询哪些数据。

因此,我希望有一个集线器响应url/api/data/{id},并且在我的集线器中,能够知道请求了哪个ID。

app.MapHub<NotificationsHub>("/api/data/{id}");

id识别一大组数据(请求并作为批量存储(,多个客户端将请求相同的ID。

我在文档中找不到:

  • 如果可能
  • 我应该如何指定ID参数
  • 如何在集线器中检索此ID

如果有人有指针,那会很有帮助,非常感谢

您可以将参数作为查询字符串参数传递。从连接url传递id:

_hubConnection = new HubConnectionBuilder()
.WithUrl("/api/data?id=123")
.Build();

然后在集线器内读取:

public override async Task OnConnectedAsync()
{
string id = Context.GetHttpContext().Request.Query["id"];
var connectionId = Context.ConnectionId;
await Groups.AddToGroupAsync(connectionId, id);
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
string id = Context.GetHttpContext().Request.Query["id"];
var connectionId = Context.ConnectionId
await Groups.RemoveFromGroupAsync(connectionId, id);

await base.OnDisconnectedAsync(exception);
}

发送数据:

_hubContext.Group("123").SomeMethod(dataBatch);

地图中枢:

app.MapHub<NotificationsHub>("/api/data")

最新更新