我正在使用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以及如何告诉它做正确的工作?
提前致谢。
答案 0 :(得分:1)
要使用SignalR 0.5.3启用跨域SignalR请求,您应该按如下方式调用MapHubs
:
RouteTable.Routes.MapHubs(new HubConfiguration() { EnableCrossDomain = true });
手动操作Access-Control-Allow-Origin标头可能会导致问题,因为如果您在MapHubs
中启用跨域访问,SignalR将为您设置标头。
IAppBuilder.UseCors
是Microsoft.Owin.Cors NuGet包提供的OWIN中间件。此中间件与SignalR 0.5.3不兼容,但可以与没有EnableCrossDomain选项的较新版本的SignalR一起使用。
我在以下答案中回顾了其他一些常见的SignalR跨域陷阱:Cross-domain will not work with a SignalR PersistentConnection