WebAPI SignalR在不同的浏览器上协商不同的响应

时间:2014-01-11 13:32:27

标签: asp.net-web-api cors signalr-hub signalr.client

我认为有关Access-Control-Allow-Origin的主要问题。但是,当我按照given documentation中的定义配置Web API项目时,它仍然无法在chrome和firefox中运行,但在IE中运行良好(它是关于IE认为localhost不是跨域,AFAIK)。我尝试了不同的方法使它工作但没有结果。

我将示例项目放到github repository。项目很简单。有两个应用程序在跨域工作。这是一个非常简单的聊天应用程序,如信号器示例。

您必须在客户端javascript文件中更改api主机的值: https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApp/Scripts/app/chat.js#L2

当你在mvc项目中打开聊天页面时,会有两个api应用程序请求

1-常规ajax请求(工作正常)

2-信号员协商请求(已​​取消)

而且我也不认为浏览器会禁用CORS,因为如果它禁用,则不会对服务器造成打击。所以我认为这是关于浏览器而不是浏览器禁用(其他)。

详细信息在存储库中 自述文件:https://github.com/yusufuzun/WebApiSignalR/blob/master/README.md 提琴手结果:https://github.com/yusufuzun/WebApiSignalR/blob/master/FiddlerResults

关于它的坏处也是服务器返回500并出现此错误: System.InvalidOperationException:'chat'Hub无法解析。

哪个中心名称也是聊天。 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/Hubs/ChatHub.cs#L10

您可以使用不同的方式为项目中的Web Api启用CORS以进行测试。每一个都给出了关于XMLHttpRequest Access-Control-Allow-Origin的不同错误。

我对它们进行了评论,因此您可以取消注释并对每个进行测试:

https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/Global.asax.cs#L24 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/App_Start/WebApiConfig.cs#L14 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/App_Start/WebApiConfig.cs#L16 https://github.com/yusufuzun/WebApiSignalR/blob/master/ChatApi/Controllers/ChatController.cs#L17

那么这里发生了什么?

1 个答案:

答案 0 :(得分:4)

David Fowler中与JabbR交谈后,他提到了将CORS与SignalR结合使用的问题。我的信号器启动代码错了。因此,在更改启动代码后,就像他的建议一样,它运作良好。

他还提到SignalR和Web API正在使用不同的CORS定义。因此,启用或禁用其中一个不会影响其他人。

以下是新的启动代码:

app.Map("/signalr", map =>
{
    map.UseCors(CorsOptions.AllowAll);
    map.RunSignalR(new HubConfiguration()
    {
        EnableDetailedErrors = true,
        EnableJavaScriptProxies = true
    });
});

旧的:

app.MapSignalR(new HubConfiguration()
{
    EnableDetailedErrors = true,
    EnableJavaScriptProxies = true
}).UseCors(CorsOptions.AllowAll);

希望对那里的人有所帮助。