獲取 SignalR 集線器內的完整 URL
我正在為 ASP.NET MVC 應用程序開發一個使用 SignalR 的使用者跟踪解決方案,作為一個學習 SignalR 的有趣項目。
目前我可以跟踪登錄的使用者以及他們在特定頁面上的停留時間。如果他們移動到另一個頁面,我也會跟踪它,並且 SignalR 正在更新的計時器會重置……許多其他功能已實現或部分實現。
我面臨的問題是如何在 SignalR 集線器中獲取完整的 url Controller/Action/Parameters?
當我使用
HttpContext.Current.Request.Urlurl 總是**/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();
可以通過查詢字元串參數將您的位置值等數據傳遞給 Connect():SignalR: How to send data to IConnected.Connect()
使用查詢字元串不是很安全,因為黑客可以偽造 JS 程式碼並向您發送錯誤的位置,從而破壞您背後的任何邏輯。
您可以嘗試從 owin-enviromment 變數中獲取此資訊
var underlyingHttpContext = Context.Request.Environment[typeof(HttpContextBase).FullName] as HttpContextBase;然後提取你需要的任何東西。
它將在 IIS 上執行,對於非 IIS 託管尋找其他 OWIN 東西https://github.com/aspnet/AspNetKatana/wiki/OWIN-Keys