关于 Signalr OnConnected 方法中的 c#:HttpContext null

HttpContext null in Signalr OnConnected method

我正在使用信号器,但在 Onconnected 方法中遇到问题。我在这里需要 urlreferrer 但我得到一个空指针异常。

1
2
3
4
5
6
public override Task OnConnected()
{
    string urlreferrer = HttpContext.Current.Request.UrlReferrer.ToString();
    // Getting null exception here..
    return base.OnConnected();
}

我该如何解决这个问题?


SignalR 暴露了自己的 Context 对象,这与 HttpContext 有点不同,但它包含了关于请求的大部分信息。

要获得referrer,您必须检查随请求一起传递的http 标头。像这样:

1
2
3
4
5
public override Tasks.Task OnConnected()
{
    var referrer = Context.Request.Headers["Referer"];
    return base.OnConnected();
}

如果有人仍在寻找此问题的答案,我发现我能够在 SignalR JS 中使用未记录的 \\'qs\\' 参数将数据传递到集线器。使用这种方法,应该可以获取referrer(在客户端)并将其发送到服务器进行进一步处理。

在客户端 JS 中:

1
2
3
4
$.connection.hub.qs ="referrer=" + encodeURIComponent(location.href);
$.connection.hub.start().done(function () {
    //initialization code
});

并在服务器代码中:

1
2
3
4
5
6
7
8
9
   public override Task OnConnected()
    {
        var str = Context.Request.QueryString["referrer"];

        if (!string.IsNullOrWhiteSpace(str))
        {
            //do stuff
        }
    }

HTH!