2013-12-10 34 views
4

我使用signalr在我的asp.net mvc4的WebAPI項目(2.0.0版本),自定義頁眉和Signalr:Asp.Net MVC4網絡API

這裏允許跨源資源共享,我用下面的代碼在webconfig文件

<customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <remove name="X-Powered-By" /> 
    </customHeaders> 

下面是用於從服務器接收數據的客戶端側signalr代碼:我使用下面的代碼,以實現與signalr CORS

$(function() { 
    var nodePublishingHub = $.connection.nodePublishingHub; 
    nodePublishingHub.client.NodePublished = onNewMessage; 

    $.connection.hub.error(function (error) { 
     $('#messages').append('<li>' + error + '</li>'); 
    }); 

    $.connection.hub.url = "http://localhost:5441/signalr"; 
    $.connection.hub.start({ transport: 'longPolling' }) 
}); 

public void Configuration(IAppBuilder app) 
    { 
     app.Map("/signalr", map => 
     { 
      map.UseCors(CorsOptions.AllowAll); 
      var hubConfiguration = new HubConfiguration 
      { 
       EnableJSONP = true 
      }; 
      map.RunSignalR(hubConfiguration); 
     }); 
    } 

但是發生錯誤,

XMLHttpRequest cannot load http://localhost:5441/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%…name%22%3A%22nodepublishinghub%22%7D%5D&clientProtocol=1.3&_=1386654835296. The 'Access-Control-Allow-Origin' header contains the invalid value 'null, *'. Origin 'null' is therefore not allowed access. 

我怎樣才能解決這個問題呢?請幫忙。

我嘗試以下,

  1. 我加入這個代碼golbal.asax但它只會讓enaled每種方法的CRO,所以我不能從服務器來處理得到的圖像。

    HttpContext.Current.Response.Headers.Add("Access-Control-Allow-Origin", "*"); 
    

回答

4

爾瑪

這應該做的伎倆

去你jquery.signalr 2.0.0.js文件並更改withCredentials =真亦假

if (typeof (config.withCredentials) === "undefined") { config.withCredentials = false; }

+6

如果您不想更改jquery.signalr 2.0.0.js, 那麼只需使用hub.start({withCredential:false}) – AlfeG

5

不要修改信號源的原始代碼。何時更新您的代碼將停止工作。

首選此相反:

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

start({ withCredentials: false })代替tipical start()將做的工作。 您可以驗證here (GitHub issue tracker)的官方支持。

+1

這應該是接受的答案 – evilpilaf