2013-03-20 12 views

risposta

49

Non v'è alcun modo semplice per impostare intestazioni HTTP per le richieste SignalR utilizzando il client JS o .NET, ma è possibile aggiungere i parametri alla stringa di query che verrà inviato come parte di ogni richiesta SignalR:

JS Cliente

$.connection.hub.qs = { "token" : tokenValue }; 
$.connection.hub.start().done(function() { /* ... */ }); 

.NET client

var connection = new HubConnection("http://foo/", 
            new Dictionary<string, string> 
            { 
             { "token", tokenValue } 
            }); 

All'interno di un Hub è possibile accedere al nome della comunità attraverso il contesto:

Context.QueryString["token"] 

È possibile aggiungere alla stringa di query quando si effettuano le connessioni persistenti pure.

MODIFICA: ora è possibile impostare le intestazioni sul client .NET SignalR come indicato da alcuni dei commentatori.

Impostazione intestazioni sul client .NET

var connection = new HubConnection("http://foo/"); 
connection.Headers.Add("token", tokenValue); 
+0

Grazie!Sì, sembra essere l'unico modo al momento di passare parametri aggiuntivi alla connessione. –

+4

L'ultima versione di SignalR 1.1.0beta supporta l'impostazione delle intestazioni. Puoi ottenere gli ultimi pacchetti da NuGet. –

+0

Non riesco a trovare alcuna documentazione su come impostare effettivamente l'intestazione. Potresti indicarmi in qualche direzione? –

12

È possibile aggiungere intestazioni su entrambi Connection o HubConnection utilizzando il .NET cliente (come @abnanda menzioni):

var connection = new Connection("http://signalr/"); 
connection.Headers.Add("custom-header", "value"); 

Sul lato server è possibile recuperare il valore dell'intestazione da IRequest in es OnConnected:

var header = request.Headers["custom-header"]; 

Tuttavia, non ho ancora trovato un modo per farlo con il JS cliente (non ci sono intestazioni o addHeaders sull'oggetto di connessione $).

ho postato una domanda su quella a: http://forums.asp.net/t/1910020.aspx/1?Add+custom+HTTP+header+on+client+side+connect+call+SignalR+1+1+1+

EDIT: Le intestazioni non sono esposti in quanto il cliente websocket (nel browser) non lo supportano (in modo che non sarebbe possibile per la sua attuazione attraverso trasporti) . Vedi la risposta di David Fowlers nel post qui sopra.

3

Ho risolto questo problema aggiungendo le mie informazioni allo querystring, disponibile nel metodo IConnected.Connect().

Sul client .NET si passa il querystring into your HubConnection:

var connection = new HubConnection("http://localhost:8080/", "myInfo=12345"); 

Sul client JS si imposta la proprietà qs prima di iniziare il collegamento:

$.connection.hub.qs = "myInfo=12345"; 

È quindi possibile accedere a queste informazioni sul server nel metodo Connect():

var myInfo = Context.QueryString["myInfo"]; 
Groups.Add(Context.ConnectionId, myInfo); 
+0

Trucco intelligente. Mi hai appena salvato la vita ora. Grazie – Jacob

Problemi correlati