2013-03-20 5 views

Antwort

49

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); 
+0

Danke!Ja, es scheint im Moment der einzige Weg zu sein, zusätzliche Params an die Verbindung zu übergeben. –

+4

Die neueste Version von SignalR 1.1.0beta unterstützt das Setzen von Headern. Sie können die neuesten Pakete von NuGet erhalten. –

+0

Ich kann anscheinend keine Dokumentation finden, wie man den Header tatsächlich setzt. Kannst du mich in eine Richtung weisen? –

12

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.

3

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); 
+0

Smart Trick. Du hast gerade mein Leben gerettet. Vielen Dank – Jacob