我正在为 ASP.NET MVC 应用程序开发一个使用 SignalR 的用户跟踪解决方案,作为一个学习 SignalR 的有趣项目。
目前我可以跟踪登录的用户以及他们在特定页面上的停留时间。如果他们移动到另一个页面,我也会跟踪它,并且 SignalR 正在更新的计时器会重置......许多其他功能已实现或部分实现。
我面临的问题是如何在 SignalR 集线器中获取完整的 url Controller/Action/Parameters?
当我使用HttpContext.Current.Request.Url
url 总是/signalr/connect。
笔记:
var hub = $.connection.myHub;
$.connection.hub.start();
在 _Layout.cshtml 中。
更新:
我试过用
var location = '@HttpContext.Current.Request.Url';
var hub = $.connection.myHub;
$.connection.hub.start().done(function () {
hub.setLocation(location);
});
并且该位置已正确传递,但我稍后需要在 Connect() 任务中使用它。是否有可能做到这一点?
更新 2:
这种方法行不通
var hub = $.connection.myHub;
$.connection.hub.start(function(){hub.setLocation(location)});
正如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
}
}
更新 3
使用 QueryString 在发生之前传递数据Connect()
。
var location = '@HttpContext.Current.Request.Url';
var hub = $.connection.myHub;
$.connection.hub.qs = "location= + location;
$.connection.hub.start();