2014-01-11 35 views
0

關於Access-Control-Allow-Origin的主要問題我想。但是當我按照given documentation中的定義配置Web API項目時,它仍然不能在Chrome和Firefox中工作,但在IE中工作良好(這是關於IE認爲localhost不是跨域AFAIK的)。我嘗試了不同的方式使其工作,但沒有結果。WebAPI SignalR在不同瀏覽器上協商響應不同

我把示例項目設置爲github repository。項目非常簡單。有兩個應用程序在跨域上工作。在信號示例中是非常簡單的聊天應用程序。

您必須javascript文件更改客戶端API主機的值: https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApp/Scripts/app/chat.js#L2

當您在MVC項目打開聊天頁面,將有兩個請求API應用

1-經常Ajax請求(這是工作的罰款)

2- Signalr協商請求(取消)

同時,我不認爲瀏覽器禁用,因爲如果它禁用的有回函的CORS ld不會對服務器造成影響。所以我認爲這是關於瀏覽器,而不是關於瀏覽器禁用(別的東西)。

詳細信息可在倉庫 自述:https://github.com/yusufuzun/WebApiSignalR/blob/master/README.md 提琴手結果:https://github.com/yusufuzun/WebApiSignalR/blob/master/FiddlerResults

壞的部分大約也就是服務器與此錯誤返回500: System.InvalidOperationException:「聊天」集線器無法解析。

哪個中心名稱也是聊天。 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/Hubs/ChatHub.cs#L10

您可以使用不同的方式爲項目中的Web API啓用CORS以進行測試。每個人都給出了關於XMLHttpRequestAccess-Control-Allow-Origin的不同錯誤。

我評論他們,這樣你就可以取消,並測試每一個:

https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/Global.asax.cs#L24 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/App_Start/WebApiConfig.cs#L14 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/App_Start/WebApiConfig.cs#L16 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/Controllers/ChatController.cs#L17

那麼,什麼是怎麼回事?

回答

4

在我與David FowlerJabbR交談後,他提到了有關在SignalR中使用CORS的問題。我的信號啓動代碼是錯誤的。所以在改變啓動代碼之後,就像他的建議一樣,它運行良好。

他還提到SignalR和Web API正在使用不同的CORS定義。因此啓用或禁用一個不會影響其他。

這是新的啓動代碼:

app.Map("/signalr", map => 
{ 
    map.UseCors(CorsOptions.AllowAll); 
    map.RunSignalR(new HubConfiguration() 
    { 
     EnableDetailedErrors = true, 
     EnableJavaScriptProxies = true 
    }); 
}); 

老一:

app.MapSignalR(new HubConfiguration() 
{ 
    EnableDetailedErrors = true, 
    EnableJavaScriptProxies = true 
}).UseCors(CorsOptions.AllowAll); 

希望它有助於有人在那裏。

+0

我得到這個輸出:... \ Startup.cs(14,21,14,28):錯誤CS1061:'Owin.IAppBuilder'不包含'UseCors'的定義,也沒有擴展方法'UseCors'接受可以找到類型'Owin.IAppBuilder'的第一個參數(您是否缺少使用指令或程序集引用?) ... \ Startup.cs(14,29,14,40):錯誤CS0103:名稱' CorsOptions'在當前上下文中不存在 –

+0

我沒有將nuget包添加到github庫。所以你需要通過包恢復prefences重新下載nuget包。只需打開添加參考窗口並單擊恢復包按鈕。 –

+0

您的舊配置也適用於我 - 只需在** MapSignalR()調用之前將UseCors()調用**即可。 – lavrik