HubConnectionには、クライアントからのURLリクエストを介してパラメーターを渡すオプションがあることがわかります。JSまたは.NETクライアントからhttpヘッダーを介して特定のトークンを渡す方法はありますか?
6 に答える
JSまたは.NETクライアントを使用してSignalR要求のHTTPヘッダーを設定する簡単な方法はありませんが、各SignalR要求の一部として送信されるクエリ文字列にパラメーターを追加できます。
JSクライアント
$.connection.hub.qs = { "token" : tokenValue };
$.connection.hub.start().done(function() { /* ... */ });
.NETクライアント
var connection = new HubConnection("http://foo/",
new Dictionary<string, string>
{
{ "token", tokenValue }
});
ハブ内では、コンテキストを介してコミュニティ名にアクセスできます。
Context.QueryString["token"]
永続的な接続を確立するときにも、クエリ文字列に追加できます。
編集:一部のコメント提供者が指摘したように、.NETSignalRクライアントにヘッダーを設定できるようになりました。
.NETクライアントでのヘッダーの設定
var connection = new HubConnection("http://foo/");
connection.Headers.Add("token", tokenValue);
.NET クライアントを使用して、Connection または HubConnection のいずれかにヘッダーを追加できます(@abnanda が言及しているように)。
var connection = new Connection("http://signalr/");
connection.Headers.Add("custom-header", "value");
サーバー側では、たとえば OnConnected の IRequest からヘッダー値を取得できます。
var header = request.Headers["custom-header"];
ただし、JS クライアントでこれを行う方法をまだ見つけていません($connection オブジェクトにヘッダーまたは addHeaders はありません)。
私はそれについて質問を投稿しました: http://forums.asp.net/t/1910020.aspx/1?Add+custom+HTTP+header+on+client+side+connect+call+SignalR+1+1 +1+
編集: websocket クライアント (ブラウザー内) がサポートしていないため、ヘッダーは公開されていません (したがって、トランスポート間で実装することはできません)。上記の投稿で David Fowlers の応答を参照してください。
querystring
メソッドで利用可能な に情報を追加することで、これを解決しましたIConnected.Connect()
。
.NET クライアントでは、querystring into your HubConnection:
var connection = new HubConnection("http://localhost:8080/", "myInfo=12345");
JS クライアントでは、接続を開始する前に qs プロパティを設定します。
$.connection.hub.qs = "myInfo=12345";
次に、Connect() メソッドでサーバー上のこの情報にアクセスできます。
var myInfo = Context.QueryString["myInfo"];
Groups.Add(Context.ConnectionId, myInfo);