11

ASP.NET MVC アプリケーション用に、SignalR を学習するための楽しいプロジェクトとして、SignalR を使用してユーザー トラッキング ソリューションを開発しています。

現在、ログに記録されたユーザーと、特定のページにいる時間を追跡できます。それらが別のページに移動すると、それも追跡し、SignalR が更新しているタイマーがリセットされます...他の多くの機能が実装されているか、部分的に実装されています。

私が直面している問題は、SignalR ハブ内の完全な URL コントローラー/アクション/パラメーターを取得する方法ですか?

私が使用する場合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();
4

3 に答える 3

5

場所の値などのデータを Connect() に渡すことは、クエリ文字列パラメーターを介して可能です: SignalR: How to send data to IConnected.Connect()

于 2012-11-02T19:15:22.110 に答える
4

クエリ文字列の使用はあまり安全ではありません。ハッカーが JS コードを偽造し、間違った場所を送信して、その背後にあるロジックを壊す可能性があるためです。

owin-enviromment 変数からこれを取得しようとすることができます

var underlyingHttpContext = Context.Request.Environment[typeof(HttpContextBase).FullName] as HttpContextBase;

次に、必要なものを抽出します。

IIS で動作します。IIS 以外のホスティングでは、他の OWIN のものを探しますhttps://github.com/aspnet/AspNetKatana/wiki/OWIN-Keys

于 2017-05-22T10:19:22.323 に答える
1

クライアント js 呼び出しからハブにパラメーターとして渡すことができます。

于 2012-11-02T10:50:06.673 に答える