Ich kann sehen, dass es eine Option in HubConnection gibt, um Parameter durch URL-Anfrage vom Client zu übergeben. Gibt es eine Möglichkeit, bestimmte Token über HTTP-Header von JS- oder .NET-Clients zu übergeben?Token über http übergeben Headers SignalR
Antwort
Es gibt keine einfache Möglichkeit, HTTP-Header für SignalR Anfragen, um den JS oder .NET-Client verwenden, aber Sie können Parameter an die Query-String hinzufügen, die als Teil jeder SignalR Anfrage wird gesendet:
JS Client
$.connection.hub.qs = { "token" : tokenValue };
$.connection.hub.start().done(function() { /* ... */ });
.NET Client
var connection = new HubConnection("http://foo/",
new Dictionary<string, string>
{
{ "token", tokenValue }
});
In einem Hub können Sie den Namen Community Zugriff durch den Kontext:
Context.QueryString["token"]
Sie können den Query-String hinzuzufügen, wenn persistente Verbindungen auch zu machen.
EDIT: Es ist jetzt möglich, Header auf dem .NET SignalR-Client zu setzen, wie von einigen der Kommentatoren hingewiesen.
Einstellung Headers auf der .NET-Client
var connection = new HubConnection("http://foo/");
connection.Headers.Add("token", tokenValue);
Sie Header entweder Connection oder HubConnection mit dem Client .NET hinzufügen kann (als @abnanda erwähnt):
var connection = new Connection("http://signalr/");
connection.Headers.Add("custom-header", "value");
Auf der Serverseite können Sie den Header-Wert von IRequest z OnConnected:
var header = request.Headers["custom-header"];
Allerdings habe ich noch nicht einen Weg gefunden, diese mit dem JS-Client zu tun (es gibt keine Header oder addHeaders auf dem $ Verbindungsobjekt).
Ich habe eine Frage zu diesem im Internet abrufbar: http://forums.asp.net/t/1910020.aspx/1?Add+custom+HTTP+header+on+client+side+connect+call+SignalR+1+1+1+
EDIT: Die Header werden seit dem websocket Client nicht ausgesetzt (in Browser) nicht unterstützt (so wäre es nicht möglich sein, sie über Transporte zu implementieren) . Siehe David Fowlers Antwort in dem obigen Beitrag.
Ich löste das, indem ich meine Informationen zu der querystring
hinzufüge, die auf der IConnected.Connect()
Methode verfügbar ist.
Auf der .NET-Client übergeben Sie die querystring into your HubConnection:
var connection = new HubConnection("http://localhost:8080/", "myInfo=12345");
Auf dem JS-Client Sie die qs-Eigenschaft festgelegt, bevor die Verbindung starten:
$.connection.hub.qs = "myInfo=12345";
können Sie dann auf diese Informationen zugreifen auf dem Server in der Connect() Methode:
var myInfo = Context.QueryString["myInfo"];
Groups.Add(Context.ConnectionId, myInfo);
Smart Trick. Du hast gerade mein Leben gerettet. Vielen Dank – Jacob
Danke!Ja, es scheint im Moment der einzige Weg zu sein, zusätzliche Params an die Verbindung zu übergeben. –
Die neueste Version von SignalR 1.1.0beta unterstützt das Setzen von Headern. Sie können die neuesten Pakete von NuGet erhalten. –
Ich kann anscheinend keine Dokumentation finden, wie man den Header tatsächlich setzt. Kannst du mich in eine Richtung weisen? –