2016-04-14 29 views
6

Zbudowałem prosty koncentrator SignalR, który działa w ramach usługi WebAPI. Uwzględniłem wszystkie wymagane atrybuty CORS zarówno w interfejsie WebAPI, jak i SignalR. Moje punkty końcowe WebAPI działają zgodnie z oczekiwaniami, ale SignalR nie jest.Odpowiedzi SignalR nadpisujące nagłówki

Wypróbowałem wszystko, co mogę wymyślić i wszystko, co mogę znaleźć w Internecie, ale nic nie działa, już próbowałem this answer i this other bez rozwiązania.

Moja metoda rozszerzenie SignalR wygląda to

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; 
    } 

A ja nawet nie próbował dodając nagłówki odpowiedzi na wszystkie żądania za pomocą Web.config ale zawsze dobrze się ten sam błąd:

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.

Odpowiedz

13

Po dalszych badaniach i pracy nad serwerem po stronie problemu, natknąłem się na this answer i stwierdziłem, że błąd leży po stronie klienta żądania. zgodnie z this GitHub issue, parametr "withCredentials" żądania jest zawsze ustawiony na "true". Rozwiązaniem było wezwać klienta metodę startu następująco:

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

Are zmieniasz zapytanie gdzieś z jakimś globalnym przechwytywaczem? Z jakiegoś powodu, XMLHttpRequest zaczyna się od withCredentials:true i jest to zabronione, gdy Access-Control-Allow-Origin jest ustawiona na *.

Co należy zrobić, ustawiając "Access-Control-Allow-Origin" na "http://MyApplicationServer"? Jest bezpieczniejszy niż * i usunie twój problem u źródła.

+0

Próbowałem zmieniając politykę CORS z SignalR określić genezę w żadnym związku, coś dziwnego dzieje się z wnioskiem i jego nagłówkami – evilpilaf