2016-04-14 12 views
6

Ich habe einen einfachen SignalR-Hub, der in einem WebAPI-Dienst lebt, ich habe alle erforderlichen CORS-Attribute auf WebAPI und SignalR enthalten. Meine WebAPI-Endpunkte funktionieren alle wie erwartet, SignalR jedoch nicht.SignalR Antworten überschreiben Header

Ich habe alles versucht, was ich denken kann und alles, was ich online finden kann, aber nichts funktioniert, habe ich bereits this answer versucht, und this other keine Lösung.

Meine SignalR Extension-Methode sieht wie folgt aus

public static IAppBuilder UseSignalrNotificationService(this IAppBuilder app) 
    { 
     var config = new HubConfiguration(); 
     config.Resolver = new HubDependencyResolver(); 
     config.EnableDetailedErrors = true; 
     app.UseCors(CorsOptions.AllowAll); 
     app.MapSignalR(config); 

     return app; 
    } 

Und ich habe sogar versucht, das Hinzufügen der Antwort-Header auf alle Anfragen, die Web.config verwenden, aber ich erhalte durchweg den gleichen Fehler:

XMLHttpRequest cannot load https://MyApplicationServer/notifications/signalr/negotiate?clientProtocol=1.5&access_token= &connectionData=. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'MyOriginService' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.

Antwort

13

Nach mehr Forschung und Fiedeln mit der Server-Seite des Problems, lief ich in this answer und fand den Fehler auf der Client-Seite der Anfrage. Gemäß this GitHub issue wird der Parameter "withCredentials" der Anforderung immer auf 'true' gesetzt. Die Lösung wurde auf dem Client die Start-Methode aufzurufen, wie folgt:

$.connection.hub.start({ withCredentials: false }).done(function() { //... } 
0

Sind Sie ändern die Anfrage irgendwo mit einer Art globalen Abfangjäger? Aus irgendeinem Grund beginnt die XMLHttpRequest mit withCredentials:true und dies ist verboten, wenn die Access-Control-Allow-Origin auf * festgelegt ist.

Wie sieht es mit der Einstellung 'Access-Control-Allow-Origin' auf 'http://MyApplicationServer' aus? Es ist sicherer als * und wird Ihr Problem an der Quelle entfernen.

+0

Ich versuchte, die CORS Politik der SignalR Änderung die Ursprünge zu keinem Ergebnis zu geben, etwas Seltsames geschieht mit dem Antrag und seinen Header – evilpilaf

Verwandte Themen