Widzę, że istnieje opcja w HubConnection, aby przekazywać parametry za pośrednictwem żądania adresu URL od klienta. Czy istnieje sposób przekazywania określonego tokenu za pośrednictwem nagłówków HTTP z klientów JS lub .NET?Przekazywanie tokenu za pośrednictwem nagłówków HTTP SignalR
Odpowiedz
Nie ma łatwy sposób ustawić nagłówki HTTP dla żądania SignalR użyciu klienta JS lub .NET, ale można dodać parametry ciągu kwerendy, która zostanie wysłana w ramach każdego wniosku SignalR:
JS klient
$.connection.hub.qs = { "token" : tokenValue };
$.connection.hub.start().done(function() { /* ... */ });
NET klient
var connection = new HubConnection("http://foo/",
new Dictionary<string, string>
{
{ "token", tokenValue }
});
Wewnątrz Hub można uzyskać dostęp do nazwy grupy poprzez kontekst:
Context.QueryString["token"]
Można dodać do ciągu kwerendy podczas wykonywania trwałych połączeń, jak również.
EDYCJA: Teraz można ustawić nagłówki na kliencie .NET SignalR, na co zwracają uwagę niektórzy komentatorzy.
Ustawianie Nagłówki na kliencie .NET
var connection = new HubConnection("http://foo/");
connection.Headers.Add("token", tokenValue);
Możesz dodać nagłówki na każdej połączenie lub HubConnection używając .NET klienta (jak @abnanda wskazań):
var connection = new Connection("http://signalr/");
connection.Headers.Add("custom-header", "value");
Po stronie serwera można pobrać wartość nagłówkową z IRequest w eg OnConnected:
var header = request.Headers["custom-header"];
Jednak jeszcze nie znalazłem sposób, aby to zrobić z JS klienta (nie ma nagłówków lub addHeaders na obiekt połączenia $).
Pisałem pytanie na tej stronie: http://forums.asp.net/t/1910020.aspx/1?Add+custom+HTTP+header+on+client+side+connect+call+SignalR+1+1+1+
EDIT: nagłówki nie są narażone od klienta websocket (w przeglądarce) nie obsługuje (więc nie byłoby możliwe do wdrożenia go w poprzek transportów) . Zobacz odpowiedź Davida Fowlersa w poście powyżej.
Rozwiązałem to, dodając moje informacje do querystring
, które są dostępne w metodzie IConnected.Connect()
.
Na kliencie .NET zdać querystring into your HubConnection:
var connection = new HubConnection("http://localhost:8080/", "myInfo=12345");
Na kliencie JS ustawić właściwość qs przed rozpoczęciem połączenia:
$.connection.hub.qs = "myInfo=12345";
Następnie można uzyskać dostęp do tych informacji na serwerze w metodzie Connect():
var myInfo = Context.QueryString["myInfo"];
Groups.Add(Context.ConnectionId, myInfo);
Inteligentna sztuczka. Właśnie uratowałeś moje życie. Dziękuję Ci – Jacob
Dzięki!Tak, wydaje się, że w tej chwili jedynym sposobem jest przekazanie dodatkowych parametrów do połączenia. –
Najnowsza wersja SignalR 1.1.0beta obsługuje nagłówki ustawień. Możesz pobrać najnowsze pakiety z NuGet. –
Nie mogę znaleźć żadnej dokumentacji, jak właściwie ustawić nagłówek. Czy możesz wskazać mi jakiś kierunek? –