【发布时间】:2012-11-02 10:39:38
【问题描述】:
我正在开发一个使用 SignalR 的用户跟踪解决方案,作为一个有趣的项目来学习 SignalR,用于 ASP.NET MVC 应用程序。
目前我可以跟踪登录的用户以及他们在特定页面上的停留时间。如果他们移动到另一个页面,我也会跟踪它,并且 SignalR 正在更新的计时器会重置......许多其他功能已实现或部分实现。
我面临的问题是如何获取完整的 url Controller/Action/Parameters 在 SignalR 集线器内?
当我使用HttpContext.Current.Request.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
在Connect() 发生之前使用QueryString 传递数据。
var location = '@HttpContext.Current.Request.Url';
var hub = $.connection.myHub;
$.connection.hub.qs = "location= + location;
$.connection.hub.start();
【问题讨论】:
-
你好......你还在研究这个跟踪解决方案......你介意分享它的代码吗?
-
@jalchr 我不介意,但 NDA 会;(如果您有任何问题,我会很乐意帮助/指出正确的方向。
-
提示:对于用户跟踪,您需要确保 SignalR 在页面完全加载所有资源之前立即连接:
waitForPageLoad,因此请确保设置:stackoverflow.com/questions/32856436/…
标签: asp.net asp.net-mvc-4 signalr signalr-hub