Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 带信号器的Cors-解决;'的值;访问控制允许原点';响应中的头不能是通配符'*';错误_Angularjs_Asp.net Core_Signalr - Fatal编程技术网

Angularjs 带信号器的Cors-解决;'的值;访问控制允许原点';响应中的头不能是通配符'*';错误

Angularjs 带信号器的Cors-解决;'的值;访问控制允许原点';响应中的头不能是通配符'*';错误,angularjs,asp.net-core,signalr,Angularjs,Asp.net Core,Signalr,我正在使用Angular 2和ASP.NET内核与Signal一起工作 我的错误如下所示: 无法加载XMLHttpRequest http://localhost:55916/signalr//signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22event%22%7D%5D&_=1486394845411. 响应中“Access Control Allow Origin”标头的值 当请求的凭据模式为时

我正在使用Angular 2和ASP.NET内核与Signal一起工作

我的错误如下所示:

无法加载XMLHttpRequest http://localhost:55916/signalr//signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22event%22%7D%5D&_=1486394845411. 响应中“Access Control Allow Origin”标头的值 当请求的凭据模式为时,不能为通配符“*” “包括”。起源'http://localhost:8080因此,"不允许" 通道由发起的请求的凭据模式 XMLHttpRequest由withCredentials属性控制

这是我的应用程序配置:

   public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(Configuration["data:secretKey"]));

            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();
                        

            app.UseCors(config =>
                 config.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());

            app.UseWebSockets();
            app.UseSignalR("/signalr");

            app.UseMvc();
        }
我也有角2信号服务开关

constructor(){
 //setups...

  this.connection = $.hubConnection(this.baseUrl + 'signalr/');
    this.proxy = this.connection.createHubProxy(this.proxyName);

    this.registerOnServerEvents();

    this.startConnection();
}
正在重新注册服务器事件:

 private registerOnServerEvents(): void {
        this.proxy.on('FoodAdded', (data: any) => {
            debugger;
            this.foodchanged.emit(data);
        });

        this.proxy.on('FoodDeleted', (data: any) => {
            debugger;
            this.foodchanged.emit('this could be data');
        });

        this.proxy.on('FoodUpdated', (data: any) => {
            debugger;
            this.foodchanged.emit('this could be data');
        });

        this.proxy.on('SendMessage', (data: ChatMessage) => {
            debugger;
            console.log('received in SignalRService: ' + JSON.stringify(data));
            this.messageReceived.emit(data);
        });

        this.proxy.on('newCpuValue', (data: number) => {
            debugger;
            this.newCpuValue.emit(data);
        });
    }

错误从开头开始。

只要应用程序中使用了凭据安全性,您就应该指定CORS请求可能来自的域:

app.UseCors(config => config.WithOrigins("http://localhost:8080"));
如果您允许来自世界上任何域的CORS请求,则凭据安全性的价值将大大降低。这就是错误消息告诉我们的。

这对我很有效

    app.UseCors(config => config.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().AllowCredentials());

必须添加AllowCredentials选项

我找到了答案。在客户端设置连接时,我必须添加

凭证件

属性为false

因此,代码如下所示:

private startConnection(): void {
    this.connection.start({ withCredentials: false }).done((data: any) => {
        this.connectionEstablished.emit(true);
        this.connectionExists = true;
    }).fail((error: any) => this.connectionEstablished.emit(false));
}

这是一个巨大的痛苦来源,在MS文档中被严重忽略。您是否找到Microsoft为connection.start()列出所有重载的地方?在这么多的例子中,他们只是展示了允许COR的所有“*”起源,并将其保留。这不是一个角度特定的问题,但会涉及到XMLHttpRequest的任何用法。看起来这是从最新版本中删除的:您知道如何使用通配符支持执行此组合为我生成:
CORS协议不允许同时指定通配符(任何)来源和凭据。如果需要支持凭据,请通过列出各个来源来配置CORS策略。