如何使用SignalR进行跨域连接(CORS - 访问控制允许来源)

cod*_*zoo 23 asp.net asp.net-mvc cors signalr

使用持久连接和ASP.NET JavaScript客户端,我正在尝试连接到与提供页面的子域不同的子域.

来自webserver的ASP.Net页面sub1.mydomain.com想要连接到SignalR sub2.mydomain.com.在同一子域内连接时,相同的代码可以正常工作.

我找到了另一篇文章,其中启用了跨域连接:

jQuery.support.cors = true;
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用.

如何使用持久连接和JavaScript客户端连接到第二个子域中的SignalR?

Pio*_*myd 37

您需要执行以下操作之一才能使其正常工作:

  • 设置$.connection.hub.url = 'http://subdomain.domain.com/signalr';,指向您的子域.
  • 在服务器上启用跨域:

    RouteTable.Routes.MapHubs(new HubConfiguration()
    {
      EnableCrossDomain = true
    });
    
    Run Code Online (Sandbox Code Playgroud)

  • 我得到这个输出:...\Global.asax.cs(17,64,17,81):错误CS0117:'Microsoft.AspNet.SignalR.HubConfiguration'不包含'EnableCrossDomain'的定义...\Global .asax.cs(17,13,17,91):错误CS0619:'System.Web.Routing.SignalRRouteExtensions.MapHubs(System.Web.Routing.RouteCollection,Microsoft.AspNet.SignalR.HubConfiguration)'已废弃:'使用Owin Startup类中的IAppBuilder.MapSignalR.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=320578. (3认同)

Ian*_*cer 11

在当前版本的SignalR中,使用现在单独的CORS包,其API已更改为:

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

请参阅ASP.NET SignalR Hubs API指南 - JavaScript客户端.

  • 你还需要添加`using Microsoft.Owin.Cors;`(以及安装相应的NuGet包),如果你还没有. (4认同)

ElH*_*aix 7

如果从0.5.1切换到0.5.2,您可能有以下内容:

$.connection.hub.start({ transport: 'longPolling', xdomain: true }, function () {...
Run Code Online (Sandbox Code Playgroud)

哪个可以改为:

$.connection.hub.start({ jsonp: true }, function () {...
Run Code Online (Sandbox Code Playgroud)