2016-04-14 20 views
6

Tôi đã xây dựng một trung tâm SignalR đơn giản nằm trong dịch vụ WebAPI, tôi đã bao gồm tất cả các thuộc tính CORS bắt buộc trên cả WebAPI và SignalR. Các điểm cuối WebAPI của tôi đều hoạt động như mong đợi nhưng SignalR thì không.Phản hồi ghi đè SignalR tiêu đề

Tôi đã thử tất cả những gì tôi có thể nghĩ và tất cả những gì tôi có thể tìm thấy trực tuyến nhưng không có gì hiệu quả, tôi đã thử this answerthis other không có giải pháp.

phương pháp khuyến nông SignalR của tôi trông như thế này

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

Và tôi thậm chí đã cố gắng thêm các tiêu đề phản ứng trên tất cả các yêu cầu sử dụng Web.config nhưng tôi allways nhận được lỗi tương tự:

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.

Trả lời

13

Sau khi nghiên cứu thêm và không quan tâm đến phía máy chủ của sự cố, tôi đã gặp phải this answer và phát hiện lỗi xảy ra với phía máy khách của yêu cầu. theo số this GitHub issue, thông số "withCredentials" của yêu cầu luôn được đặt thành 'true'. Giải pháp là gọi cho khách hàng phương thức bắt đầu như sau:

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

Are bạn thay đổi yêu cầu ở đâu đó với một loại máy đánh chặn toàn cầu nào đó? Vì một số lý do, XMLHttpRequest bắt đầu bằng withCredentials:true và điều này bị cấm khi Access-Control-Allow-Origin được đặt thành *.

Điều gì về việc đặt 'Access-Control-Allow-Origin' thành 'http://MyApplicationServer'? Nó an toàn hơn * và sẽ loại bỏ vấn đề của bạn tại nguồn.

+0

Tôi đã cố thay đổi chính sách CORS của SignalR để chỉ định nguồn gốc không có kết quả, điều gì đó kỳ lạ xảy ra với yêu cầu và tiêu đề của nó – evilpilaf

Các vấn đề liên quan