CORS与SignalR和ASP.NET MVC 3的奇怪行为

时间:2014-02-10 10:23:49

标签: asp.net-mvc-3 signalr cors

我正在使用signalR 0.5.3,我的网络应用程序位于localhost:1234,我的中心位于localhost:5678,这意味着相同的主机名和不同的端口。两者都在IIS 7 Express,Windows 7上。

当我将其添加到我的中心服务器的web.config时。

<add name="Access-Control-Allow-Origin" value="*" />

Google Chrome的控制台大喊:

 The 'Access-Control-Allow-Origin' header contains the invalid value 'http://localhost:1234, *'.

但是当我删除该配置时,它会大叫:

  

请求时没有'Access-Control-Allow-Origin'标头   资源。

我搜索了整个解决方案,以确保无处可用

Response.AppendHeader("Access-Control-Allow-Origin", "*");

map.UseCors(CorsOptions.AllowAll);

有谁知道为什么中心服务器会继续返回2个orgins以及如何告诉它做正确的工作?

提前致谢。

1 个答案:

答案 0 :(得分:1)

要使用SignalR 0.5.3启用跨域SignalR请求,您应该按如下方式调用MapHubs

RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });

手动操作Access-Control-Allow-Origin标头可能会导致问题,因为如果您在MapHubs中启用跨域访问,SignalR将为您设置标头。

IAppBuilder.UseCorsMicrosoft.Owin.Cors NuGet包提供的OWIN中间件。此中间件与Sig​​nalR 0.5.3不兼容,但可以与没有EnableCrossDomain选项的较新版本的SignalR一起使用。

我在以下答案中回顾了其他一些常见的SignalR跨域陷阱:Cross-domain will not work with a SignalR PersistentConnection