У меня есть глобальная политика CORS, которая применима для всех конечных точек, но я хочу переопределить эту политику для конечной точки хаба signalR.
Вот мой метод ConfigureServices, который имеет глобальную политику CORS, которую я не могу modify
public void ConfigureServices(IServiceCollection services)
{
// some piece of code before adding CORS
services.AddCors(o =>
{
o.AddDefaultPolicy(p =>
{
p.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
// some piece of code after adding CORS
}
Вот метод Configure
public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
{
app.UseCors();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endPoints =>
{
endPoints.MapControllers();
endPoints.MapHub<NotificationHub>("/notificationHub")
.RequireCors((builder) =>
{
builder
.WithOrigins(_configuration.GetValue<string>("Settings:ClientAppUrl"))
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
}
Поскольку ясно, что я переписал политику CORS для конкретной конечной точки сигнала, которая является /notificationHub.
Я получаю ту же ошибку CORS в браузере, что и перед добавлением политики CORS для / messagesHub /gotiate
Ответ на предварительный запрос не проходит проверку контроля доступа: значение заголовка «Access-Control-Allow-> Credentials» в ответе «», который должен иметь значение «true», если режим учетных данных запроса>> include. Режим учетных данных запросов, инициируемых XMLHttpRequest, управляется атрибутом> withCredentials.
Также обратите внимание, что если я добавлю метод AllowCredentials () в глобальную политику CORS, то signalR будет работать правильно, но моя цель здесь состоит в том, чтобы добавить новую политику CORS только для конечной точки signalR.
Я не использую OWIN CORS, это просто Microsoft.AspNetCore.Cors.