获取SignalR中心内的完整URL

Mat*_*cic 10 asp.net asp.net-mvc-4 signalr signalr-hub

我正在开发一个使用SignalR的用户跟踪解决方案,作为学习SignalR的有趣项目,用于ASP.NET MVC应用程序.

目前,我可以跟踪已记录的用户以及他们在特定页面上的时长.如果他们移动到另一个页面,我也跟踪它并且SignalR正在更新的计时器重置...许多其他功能被实现或部分实现.

我面临的问题是如何在SignalR集线器内获得完整的URL控制器/动作/参数?

当我使用HttpContext.Current.Request.Urlurl时总是/ signalr/connect.

注意:

var hub = $.connection.myHub;
$.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)

在_Layout.cshtml中.

更新:

我试过用

var location = '@HttpContext.Current.Request.Url';
var hub = $.connection.myHub;
$.connection.hub.start().done(function () {
    hub.setLocation(location);
});
Run Code Online (Sandbox Code Playgroud)

并且位置正确传递但我不需要在Connect()任务上使用它.是否有可能做到这一点?

更新2:

这种方法不起作用

var hub = $.connection.myHub;
$.connection.hub.start(function(){hub.setLocation(location)});
Run Code Online (Sandbox Code Playgroud)

就像Connect()之前所说的那样.

在我的中心我有几种方法,但我想传递一个值(在我的情况下是一个位置)Connect(),这可能吗?

public class MyHub : Hub, IDisconnect, IConnected
{  
    public Task Connect()
    {
       //do stuff here
       //and i would like to have the **location** value
    } 

    public Task Disconnect()
    {
       //do stuff here            
    }             
}
Run Code Online (Sandbox Code Playgroud)

更新3

使用QueryString在Connect()发生之前传递数据.

var location = '@HttpContext.Current.Request.Url';

var hub = $.connection.myHub;
$.connection.hub.qs = "location= + location;
$.connection.hub.start();
Run Code Online (Sandbox Code Playgroud)

Ale*_*ger 5

可以通过查询字符串参数将诸如位置值之类的数据传递给 Connect():SignalR: How to send data to IConnected.Connect()