SignalR 的跨域协商请求错误

Cross Domain Negotiation request error with SignalR

我有一个 ASP.NET Web Api 项目,其中已实现 SignalR。在 Stratup class 中,我使用 CorsOptions.AllowAll。在 WebApiConfig class 中,我还使用了 EnableCorsAttribute("", "", "*")。我在服务器位置 (http://192.168.9.6:3030) 发布了这个 Web Api 项目。 但是在尝试使用来自 javascript 客户端的 $.hubConnection("http://192.168.9.6:3030/signalr") 进行连接时,我得到了这个:"Error during negotiation request."

如果我从我的 PC 使用 http://localhost:8080,而不是使用提到的 Url,我可以连接到 SignalR。

这是启动程序Class

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

            map.RunSignalR(hubConfiguration);
        });
    }
}

枢纽Class

public class SetupHub : Hub
{
    public void Send(string name, string message)
    {
        var msg = String.Format("{0}: {1} : {2}", name, message, DateTime.Now);
        Clients.All.addMessage(msg);            
    }
}

WebApi配置Class

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {   
        // Web API configuration and services
        var cors = new EnableCorsAttribute("*", "*", "*");
        //  config.EnableCors();
        config.EnableCors(cors);

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

全球 ASAX

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

JavaScript 客户

var connection = $.hubConnection("http://192.168.9.6:3030/signalr");
var setupHubProxy = connection.createHubProxy('SetupHub');

setupHubProxy.on('addMessage', function (msg) {
    alert(msg);
});

connection.start()
        .done(function () {
            console.log('connected');
        })
    .fail(function (a) {
        console.log('not connected' + a);
    });

非常感谢与此相关的任何帮助。

我在 web.config

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>

也许这对你也适用。

错误在这一行:

app.UseCors(CorsOptions.AllowAll);

会是

map.UseCors(CorsOptions.AllowAll);