我认为有关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
那么这里发生了什么?
答案 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);
希望对那里的人有所帮助。