自定义标头和信号器:Asp.Net MVC4 Web Api

Erm*_*bel 5 asp.net-mvc-4 signalr asp.net-web-api

我在我的asp.net mvc4 webapi项目中使用signalr(版本2.0.0),

这里允许跨源资源共享,我在webconfig文件中使用以下代码

 <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <remove name="X-Powered-By" />
  </customHeaders>
Run Code Online (Sandbox Code Playgroud)

以下是用于从服务器接收数据的客户端信号器代码:

 $(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' })
});
Run Code Online (Sandbox Code Playgroud)

我使用以下代码启用带信号器的CORS,

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

但是会发生错误,

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.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?请帮忙.

我试过以下,

  1. 我在golbal.asax中添加了这个代码,但它只会使每个方法交叉,所以我无法从服务器获取图像进行处理.

      HttpContext.Current.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    
    Run Code Online (Sandbox Code Playgroud)

Vin*_*nzo 6

不要修改signalr原始源代码.何时更新您的代码将停止工作.

更喜欢这样:

$.connection.hub.start({ withCredentials: false }).done(function () {
  //...
}
Run Code Online (Sandbox Code Playgroud)

start({ withCredentials: false })而不是典型的start()将做的工作.你可以在这里验证(GitHub问题跟踪器)的官方支持.


Tin*_*cko 5

尔玛

这应该可以解决问题

转到您的jquery.signalr 2.0.0.js文件并将withCredentials = true更改为false

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

  • 如果您不想更改jquery.signalr 2.0.0.js,那么只需使用hub.start({withCredential:false}) (6认同)