Angularjs 带信号器的Cors-解决;'的值;访问控制允许原点';响应中的头不能是通配符'*';错误
我正在使用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属性控制 这是我的应用程序配置: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”标头的值 当请求的凭据模式为时
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策略。