Asp.net-Web-Api

SignalR 響應覆蓋標頭

  • April 15, 2016

我已經建構了一個簡單的 SignalR 集線器,它位於 WebAPI 服務中,我已經在 WebAPI 和 SignalR 中包含了所有必需的 CORS 屬性。我的 WebAPI 端點都按預期工作,但 SignalR 沒有。

我已經嘗試了所有我能想到的以及我在網上可以找到的所有內容,但沒有任何效果,我已經嘗試了這個答案,而這個答案沒有任何解決方案。

我的 SignalR 擴展方法如下所示

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

我什至嘗試使用 Web.config 在所有請求上添加響應標頭,但我總是得到相同的錯誤:

XMLHttpRequest 無法載入https://MyApplicationServer/notifications/signalr/negotiate?clientProtocol=1.5&access_token= &connectionData=。當憑證標誌為真時,不能在“Access-Control-Allow-Origin”標頭中使用萬用字元“*”。因此,Origin ‘MyOriginService’ 不允許訪問。XMLHttpRequest 的憑證模式由 withCredentials 屬性控制。

在對問題的伺服器端進行更多研究和擺弄之後,我遇到了這個答案,發現錯誤與請求的客戶端有關。根據this GitHub issue,請求的“withCredentials”參數始終設置為“true”。解決方案是在客戶端呼叫 start 方法,如下所示:

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

您是否使用某種全域攔截器在某處更改請求?出於某種原因,XMLHttpRequestwithCredentials:trueAccess-Control-Allow-Origin*.

將“Access-Control-Allow-Origin”設置為“ http://MyApplicationServer ”怎麼樣?它比 * 更安全,並且會從源頭上解決您的問題。

引用自:https://stackoverflow.com/questions/36635343