SignalR 響應覆蓋標頭
我已經建構了一個簡單的 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 () { //... }
您是否使用某種全域攔截器在某處更改請求?出於某種原因,XMLHttpRequest
withCredentials:true以Access-Control-Allow-Origin*.將“Access-Control-Allow-Origin”設置為“ http://MyApplicationServer ”怎麼樣?它比 * 更安全,並且會從源頭上解決您的問題。