Asp.net 获取信号器中心内的完整URL

Asp.net 获取信号器中心内的完整URL,asp.net,asp.net-mvc-4,signalr,signalr-hub,Asp.net,Asp.net Mvc 4,Signalr,Signalr Hub,我正在为ASP.NET MVC应用程序开发一个使用SignalR的用户跟踪解决方案,这是学习SignalR的一个有趣的项目 目前,我可以跟踪已登录的用户以及他们在特定页面上的停留时间。如果他们移动到另一个页面,我也会跟踪它,信号器正在更新的计时器会重置。。。许多其他功能已实现或部分实现 我面临的问题是如何获取完整的url控制器/操作/参数 信号中心内部 当我使用HttpContext.Current.Request.Url时,Url总是/signal/connect 注: var hub = $

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

目前,我可以跟踪已登录的用户以及他们在特定页面上的停留时间。如果他们移动到另一个页面,我也会跟踪它,信号器正在更新的计时器会重置。。。许多其他功能已实现或部分实现

我面临的问题是如何获取完整的url控制器/操作/参数 信号中心内部

当我使用
HttpContext.Current.Request.Url
时,Url总是/signal/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()

在我的hub中,我有几种方法,但我想将一个值(在我的示例中是一个位置)传递给
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();

您可以将它作为参数从客户端js调用传递到中心。

可以通过querystring参数将位置值之类的数据传递给Connect():

使用查询字符串不是很安全,因为黑客可以伪造js代码并发送错误的位置,从而破坏您的逻辑

您可以尝试从owin环境变量中获取此信息

var underyinghttpcontext=
Context.Request.Environment[typeof(HttpContextBase).FullName]作为HttpContextBase

然后提取你需要的任何东西


它将在IIS上工作,对于非IIS托管,请查找其他OWIN内容

谢谢您的回复。我已经更新了这个问题。这个问题有什么解决办法吗?你能不能先把它放在start()中,这样就够早了。e、 g.hub.start(funcoint(){hub.setLocation(location);})而不是在完成.Connect()任务时,我不清楚您的确切意思。谢谢。我真的不知道谷歌或Stackoverflow的建议是如何让我找到你的答案的。。。您是否仍在使用此跟踪解决方案。。。你介意分享它的代码吗?@jalchr我不介意,但是NDA会;(如果您有任何问题,我将帮助您/指出正确的方向。提示:对于用户跟踪,您需要确保Signal在页面完全加载所有资源之前立即连接:
waitForPageLoad
,因此请确保设置: