如何获取给定 SignalR .Net Core 连接的客户端页面 URI

How to get client page URI for a given SignalR .Net Core Connection

我正在将我的 ASP.Net MVC 应用程序升级到 ASP.Net Core 3.1

在现有的应用程序中,我可以通过重写 Hub class 的 OnConnected 方法来访问 SignalR 连接来自的 URL,和阅读 Context.Headers("referer")。我会用它来判断每个 SignalR 连接在我的应用程序的哪个页面上。

但是,在 SignalR .Net Core 中,没有这样的 header 发送。

如何获取 .Net Core 3.1 中 SignalR 连接的引用 URL?

How can I get to the referring URL for the SignalR connections in .Net Core 3.1?

为达到您的要求,您可以尝试在配置 HubConnection 时将当前页面的路径和文件名作为查询字符串传递,如下所示。

var pn = window.location.pathname;
var connection = new signalR.HubConnectionBuilder().withUrl("https://xxxx/chatHub?pagename=" + pn)
    .build();

然后在您的中心服务器上,您可以使用以下代码片段获取它们。

public override async Task OnConnectedAsync()
{
    var httpcontext = Context.GetHttpContext();
    var pname = httpcontext.Request.Query["pagename"];
    var from = httpcontext.Request.Headers["Origin"];

    //code logic here


    await base.OnConnectedAsync();
}

测试结果