跨域的SignalR:Access-Control-Allow-Origin不允许的错误

时间:2013-03-02 17:04:08

标签: asp.net-mvc asp.net-web-api signalr

尝试从另一个域调用signalR,并继续收到此错误:

  

XMLHttpRequest无法加载   本地主机:62150 / signalr /谈判_ = 1362242757692?起源   本地主机:Access-Control-Allow-Origin不允许使用4982。

这是我正在尝试运行的代码:

$(function () {
    jQuery.support.cors = true;
    $.connection.hub.url = 'http://localhost:62150/signalr';
    $.connection.hub.start()
        .done(function () { alert("Now connected!"); })
        .fail(function () { alert("Could not Connect!"); });
});

加载了jquery和jquery.signalr.js,localhost:62150 / signalr / hubs用JS响应,localhost:62150 / signalr / hubs / negotiate?_ = 1362243021215如果我在浏览器中运行它则返回JSON - 所以它不是缺少脚本或无效的路径问题。

我尝试了什么:

以上所有的组合。

任何人都知道我还能尝试什么?

服务应用程序是MVC和WebAPI的组合(不要认为它有任何区别)。 如果我正在尝试来自同一个域的代码 - 它可以工作。

2 个答案:

答案 0 :(得分:5)

如果您使用的是1.0或更高版本,您是否在服务器上启用了跨域? (现在默认禁用)

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

答案 1 :(得分:3)

浪费了几个小时后,我认为分享我的经验是好的:

  1. 不要将Access-Control-Allow-Origin添加到你的web.config中(是的,从来没有添加它,但是在尝试时,这实际上是我做的第一个并且离开了它在一个简单的jquery跨域访问测试之后)

  2. RouteTable.Routes.MapHubs( new HubConfiguration() { EnableCrossDomain = true } );适用于继承Hub

  3. 的类
  4. RouteTable.Routes.MapConnection<MyConnection>( "foo", "/foo", new ConnectionConfiguration { EnableCrossDomain = true } );这对于继承PersistentConnection的类来说也很好用