Asp.net mvc 3 使用signalR和ASP.NET MVC 3的CORS的怪异行为

Asp.net mvc 3 使用signalR和ASP.NET MVC 3的CORS的怪异行为,asp.net-mvc-3,signalr,cors,Asp.net Mvc 3,Signalr,Cors,我使用的是signalR 0.5.3,我的web应用程序位于localhost:1234,我的集线器位于localhost:5678,这意味着相同的主机名和不同的端口。两者都在IIS 7 Express和Windows 7上 当我将其添加到hub服务器的web.config时 <add name="Access-Control-Allow-Origin" value="*" /> 但当我删除该配置时,它会大叫: 请求的服务器上不存在“Access Control Allow Ori

我使用的是signalR 0.5.3,我的web应用程序位于
localhost:1234
,我的集线器位于
localhost:5678
,这意味着相同的主机名和不同的端口。两者都在IIS 7 Express和Windows 7上

当我将其添加到hub服务器的
web.config

<add name="Access-Control-Allow-Origin" value="*" />
但当我删除该配置时,它会大叫:

请求的服务器上不存在“Access Control Allow Origin”标头 资源

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

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

有人知道为什么hub服务器总是返回2个orgins,以及如何告诉它做正确的工作吗


提前感谢。

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

RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });
手动操作Access Control Allow Origin标头可能会导致问题,因为如果您在
MapHubs
中启用跨域访问,Signaler将为您设置标头

IAppBuilder.UseCors
是NuGet包提供的OWIN中间件。此中间件与SignalR 0.5.3不兼容,但可用于没有EnableCrossDomain选项的较新版本的SignalR

我在下面的回答中回顾了一些其他常见的信号器跨域陷阱:

map.UseCors(CorsOptions.AllowAll);
RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });