39

HubConnectionには、クライアントからのURLリクエストを介してパラメーターを渡すオプションがあることがわかります。JSまたは.NETクライアントからhttpヘッダーを介して特定のトークンを渡す方法はありますか?

4

6 に答える 6

59

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);
于 2013-03-20T18:28:14.427 に答える
17

.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 の応答を参照してください。

于 2013-05-29T07:46:38.187 に答える
4

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);
于 2015-01-05T08:57:30.943 に答える