Vedo che in HubConnection esiste un'opzione per passare i parametri tramite la richiesta di url dal client. Esiste un modo per passare token specifici tramite le intestazioni http dai client JS o .NET?Passaggio token tramite http Headers SignalR
risposta
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);
È 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.
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);
Trucco intelligente. Mi hai appena salvato la vita ora. Grazie – Jacob
Grazie!Sì, sembra essere l'unico modo al momento di passare parametri aggiuntivi alla connessione. –
L'ultima versione di SignalR 1.1.0beta supporta l'impostazione delle intestazioni. Puoi ottenere gli ultimi pacchetti da NuGet. –
Non riesco a trovare alcuna documentazione su come impostare effettivamente l'intestazione. Potresti indicarmi in qualche direzione? –