[Signalr] 有關cors

Signalr 有關cors

前言

 

當我們在做即時互動的應用的時候,其實跨網域是絕對會遇到的事情,其實做法也很簡單,但需要在nuget下載owin cors

 

image

 

然後在Startup.cs新增下列程式碼,就可以跨網域了


 public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR(new HubConfiguration {EnableJSONP=true });
        }
    }

 

即有web api專案的陷阱

 

如果就這麼簡單的話,實在也不用寫這篇文特別紀錄,最近是在一個上線的專案,要加入signalr,就遇到一個坑了,在此特別紀綠一下,當我上面的元件裝了,程式也都寫好了,偏偏就是一直遇到這個錯誤訊息”XMLHttpRequest cannot load http://localhost:57711/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22defaulthub%22%7D%5D&_=1439388095451. The 'Access-Control-Allow-Origin' header contains multiple values 'http://localhost:58168, http://localhost:49595', but only one is allowed. Origin 'http://localhost:58168' is therefore not allowed access. ”

 

image

 

該裝的元件都裝了,該加的程式也都寫了,為何會發生這個問題呢??最後我在新做一個專案然後試著做各種案例,然後比對兩個專案的時候,發現了原來是因為web api的web.config裡面的cors設定造成的,我們在使用web api的時候,為了可以開啟cors,都會在web.config加入下面的語法

 

image

 

只要把上述框起來的部份,全部移除掉,就會正常了。

 

以上希望對有遇到此麻煩的人有幫助。