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
- 1. Impostazione angularjs $ http headers globalmente
- 2. HttpClient Headers vs HttpRequestMessage Headers
- 3. Nelle specifiche HTTP CORS, qual è la differenza tra Allow-Headers e Expose-Headers?
- 4. CORS Headers Not Set
- 5. Come passare oggetti complessi tramite SignalR?
- 6. inotify C headers
- 7. Sanity of Headers
- 8. angolare $ HTTP GET richiesta con autorizzazione intestazione Token
- 9. Passaggio del token CSRF da Node.js a Django
- 10. Errore di sintassi: Token ':' è un token imprevisto quando la variabile di passaggio alla direttiva
- 11. Come eseguire l'autenticazione tramite Akka HTTP
- 12. Passaggio da Wiris http a https
- 13. Come utilizzare l'autenticazione http in oggetto con un token omniauth opzionale come token di autenticazione
- 14. Autenticazione token tramite PHP per dispositivi mobili
- 15. Caricamento file tramite Akka HTTP
- 16. Connessione Kerberos tramite client HTTP
- 17. Come inviare grandi dati tramite SignalR in client .NET
- 18. Utilizzo del client SignalR tramite un proxy Web
- 19. Passaggio di enum tramite le interfacce aidl
- 20. Passaggio di un flag gcc tramite makefile
- 21. Passaggio di dati tramite NSTimer UserInfo
- 22. Passaggio dell'array tramite attributo alla direttiva AngularJS
- 23. Realm Android - Passaggio dell'oggetto Realm tramite Intent
- 24. Passaggio tramite riferimento a un costruttore
- 25. Rails 4 - Passaggio di Params tramite link_to?
- 26. Problema con il passaggio tramite riferimento
- 27. Passaggio di dati tramite intent utilizzando Serializable
- 28. Passaggio degli eventi di tocco tramite ScrollView
- 29. SignalR "Errore durante la richiesta di negoziazione"
- 30. SignalR Typenamehandling
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? –