如何在HubConnection SignalR Core 2.1中发送参数/查询



我正在尝试将参数发送到signalr的连接中

Connection = new HubConnectionBuilder()
.WithUrl("https://familyapp.azurewebsites.net/StoreHub?token=123")
.Build();
await Connection.StartAsync();

在我的服务器端,我从HttpContext:获取这个参数

public override async Task OnConnectedAsync()
{
var group = Context.GetHttpContext().Request.Query["token"];
string value = !string.IsNullOrEmpty(group.ToString()) ? group.ToString() : "default";
await Groups.AddToGroupAsync(Context.ConnectionId, value);
await base.OnConnectedAsync();              
}

但是GetHttpContext ().Request.Query["token"]为空,因为组名称接收到由以下代码指示的"默认">

string value = !string.IsNullOrEmpty(group.ToString()) ? group.ToString() : "default";

我是不是忘了一步?我正在使用aspnetcore 2.1

根据您的代码,我认为您使用的是ASP.NET Core SignalR.NET客户端库。以下是基于您的代码在控制台应用程序中使用.NET客户端的工作演示。

控制台应用程序

1.从Manage NuGet Package安装3.1.3版本的客户端库Microsoft.AspNetCore.SignalR.Client

2.连接到集线器

var connection = new HubConnectionBuilder()
.WithUrl("http://localhost:5000/chatHub?token=123")
.Build();
await connection.StartAsync();

SignalR集线器侧

您可以参考本文来设置SignalR集线器。

1.设置SignalR路线

app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub");
});

2.集线器级别:

public class ChatHub:Hub
{
public async Task SendMessage(string user, string message)
{
await Clients.All.SendAsync("ReceiveMessage", user, message);
}
public override async Task OnConnectedAsync()
{
var group = Context.GetHttpContext().Request.Query["token"];
string value = !string.IsNullOrEmpty(group.ToString()) ? group.ToString() : "default";
await Groups.AddToGroupAsync(Context.ConnectionId, value);
await base.OnConnectedAsync();
}
}

这是我的演示链接,你可以参考。

最新更新