2014-11-23 62 views
2

在我的服務器端,我使用web api 2和signalr。 在我的客戶端,我使用的是angularjs。Signalr CORS問題

這裏的HTTP請求時,我發起signalr連接:

> GET 
> http://example.com/signalr/negotiate?clientProtocol=1.4&connectionData=%5B%7B%22name%22%3A%22main%22%7D%5D&_=1416702959615 HTTP/1.1 Host: mysite.net Connection: keep-alive Pragma: no-cache 
> Cache-Control: no-cache Accept: text/plain, */*; q=0.01 Origin: 
> http://lh:51408 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) 
> AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 
> Safari/537.36 Content-Type: application/x-www-form-urlencoded; 
> charset=UTF-8 Referer: http://localhost:51408/ Accept-Encoding: gzip, 
> deflate, sdch Accept-Language: en-US,en;q=0.8 Cookie: 
> ARRAffinity=9def17406de898acdc2839d0ec294473084bbc94a8f600c867975ede6f136080 

和響應:

> HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache 
> Transfer-Encoding: chunked Content-Type: application/json; 
> charset=UTF-8 Expires: -1 Server: Microsoft-IIS/8.0 
> X-Content-Type-Options: nosniff X-AspNet-Version: 4.0.30319 
> X-Powered-By: ASP.NET Date: Sun, 23 Nov 2014 00:36:13 GMT 
> 
> 187 
> {"Url":"/signalr","ConnectionToken":"6BKcLqjNPyOw4ptdPKg8jRi7xVlPMEgFUdzeJZso2bnXliwfY4WReQWHRpmB5YEZsbg14Au7AS5k5xS5/4qVheDxYoUkOjfFW0W8eAQsasjBaSQOifIilniU/L7XQ1+Y","ConnectionId":"f2fc7c47-c84f-49b8-a080-f91346dfbda7","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":true,"ProtocolVersion":"1.4","TransportConnectTimeout":5.0,"LongPollDelay":0.0} 
> 0 

然而,在我的javascript連接時,我發現了以下錯誤響應:

我的服務器端我的啓動方法看起來如下:
public void Configuration(IAppBuilder app) 
{ 
    System.Web.Mvc.AreaRegistration.RegisterAllAreas(); 
    ConfigureOAuth(app); 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
} 

不應該這樣確定cors是否也用在signalr上,或者我錯過了什麼嗎?

回答

2

你可以從這裏看這個片段https://github.com/louislewis2/AngularJSAuthentication/blob/master/AngularJSAuthentication.API/Startup.cs 看看它是否可以幫助你。

public void Configuration(IAppBuilder app) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 

     ConfigureOAuth(app); 

     app.Map("/signalr", map => 
     { 
      // Setup the CORS middleware to run before SignalR. 
      // By default this will allow all origins. You can 
      // configure the set of origins and/or http verbs by 
      // providing a cors options with a different policy. 
      map.UseCors(CorsOptions.AllowAll); 
      var hubConfiguration = new HubConfiguration 
      { 
       // You can enable JSONP by uncommenting line below. 
       // JSONP requests are insecure but some older browsers (and some 
       // versions of IE) require JSONP to work cross domain 
       //EnableJSONP = true 
       EnableDetailedErrors = true 
      }; 
      // Run the SignalR pipeline. We're not using MapSignalR 
      // since this branch already runs under the "/signalr" 
      // path. 
      map.RunSignalR(hubConfiguration); 
     }); 

     WebApiConfig.Register(config); 
     app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 
     app.UseWebApi(config); 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<AuthContext, AngularJSAuthentication.API.Migrations.Configuration>()); 

    } 
+0

謝謝,但我已經嘗試了它已經花了幾個小時,我試圖解決這個問題。 – JensOlsen112 2014-11-23 01:08:41

+0

在你的問題中,這是一個錯字:'http:// localhos:51408'你在你的錯誤信息中說,JavaScript正在拋出。我發現這錯過了一個't',你是否可能在客戶名單中輸入錯了? – 2014-11-23 01:10:48

+0

我想我應該提到 - 由於stackoverflows美妙的政策,我不得不改變網址。這不是一個錯字。 – JensOlsen112 2014-11-23 01:18:27

5

對於那些誰有棱有角,SignalR 2.0和Web API 2.2有同樣的問題,

我能解決這個問題,通過加入CORS配置在web.config中沒有他們webapiconfig.csstartup.cs

變化做出了web.conf ig根據<system.webServer>如下

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="http://localhost" /> 
    <add name="Access-Control-Allow-Methods" value="*" /> 
    <add name="Access-Control-Allow-Credentials" value="true" /> 
    </customHeaders> 
</httpProtocol> 
+0

你知道這是唯一有效的嗎? ;)我嘗試了路易斯劉易斯的上述答案,但沒有奏效。 – 2016-01-26 11:15:57

+0

經過大量搜索,此解決方案解決了我的問題。我正在使用SignalR 2.2。 – Shrewdroid 2016-03-11 16:50:02

+0

這也適用於我在生產環境中。 == IIS(天青應用服務) – 2016-10-28 10:14:18