【问题标题】:SignalR CORS errorSignalR CORS 错误
【发布时间】:2020-06-07 10:05:25
【问题描述】:

尝试通过 SignalR 从 javascript 客户端调用服务器端方法时出现以下错误:

XMLHttpRequest cannot load http://localhost:49679/signalr/send?transport=serverSentEvents&clientProtoc…XWYPNm9Av7oD1DiEodZenKiQdpQFWUqDJ9vD0UgrYc%2FjZs21i3&connectionData=%5B%5D. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. The response had HTTP status code 500.

我正在构建一个简单的原型,这就是我的 Web 服务器的 Startup.cs 类中的内容:

using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Microsoft.Owin.Cors;
using Owin;

[assembly: OwinStartupAttribute(typeof(WebRTCSignalServer.Web.Startup))]
namespace WebRTCSignalServer.Web
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
           //app.UseCors(CorsOptions.AllowAll);

            //Add SignalR
            app.Map("/signalr", map =>
            {
               map.UseCors(CorsOptions.AllowAll);

               // configure signalR
               HubConfiguration hubConfiguration = new HubConfiguration()
               {
                  EnableJavaScriptProxies = false,
                  EnableDetailedErrors = true
               };

               //GlobalHost.HubPipeline.AddModule(new ErrorHandlingPipelineModule());

               // Run the SignalR pipeline. We're not using MapSignalR
               // since this branch already runs under the "/signalr"
               // path.
               map.RunSignalR(hubConfiguration);
            });

            ConfigureAuth(app);
        }
    }
}

这是 javascript signalr 客户端代码:

var connection = $.hubConnection('http://localhost:49679/signalr', { useDefaultPath: false });
console.log(connection);

connection.stateChanged(function () {
    console.log('stateChanged.... state=' + connection.state);
});

connection.connectionSlow(function () {
    console.log('connectionSlow.... state=' + connection.state);
});

connection.reconnecting(function () {
    console.log('reconnecting.... state=' + connection.state);
});

connection.reconnected(function () {
    console.log('reconnected.... state=' + connection.state);
});

connection.disconnected(function () {
    console.log('disconnected.... state=' + connection.state);
});

connection.error(function (error) {
    console.log('error.... state=' + connection.state);
});

var webRTCSignalServerHub = connection.createHubProxy('webrtcsignalserver');

console.log(webRTCSignalServerHub);

connection.start().done(function(){
    webRTCSignalServerHub.invoke('register', 'wkst0314');
});

有人可以解释为什么会发生这种情况以及如何解决吗?我在 SignalR 文档中按照这个示例启用了 CORS,但它对我不起作用。不确定它是否重要,但我正在 Chrome 中尝试: http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#crossdomain

提前感谢您的帮助。

【问题讨论】:

    标签: javascript signalr owin signalr-hub


    【解决方案1】:

    我能够弄清楚这一点。我使用的 signalR Hub 的名称不正确,这就是发生该错误的原因。更正中心名称后,一切正常。

    【讨论】:

    • 我得到了完全相同的错误,并试图找出我在哪里搞砸了 CORS,然后我找到了这个答案。原来我的集线器名称也错了。该错误消息确实具有误导性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2019-06-15
    • 2015-08-14
    • 1970-01-01
    • 2016-08-03
    相关资源
    最近更新 更多