ASP Net core Cors Preflight Requests
Есть проблема: не могу общаться с бэкэндом из под расширения для Chrome.
Причиной тому - Cors, но частично я ее уже решил.
Не сосем понятно что делать с Preflight requests.
Во всех ответах, связанных с Cors и Asp net core примерно одно и тоже:
services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Но, это не работает для Preflight requests.
Как костыль знаю банальное решение:
[HttpGet]
[Route("x")]
public IActionResult X()
{
return new OkObjectResult(some_staff);
}
[HttpPatch]
[Route("x")]
public IActionResult XPatch()
{
return new OkResult();
}
- подвязывать к каждому
RouteбанальныйPatchс возвратом 200.
Но после 4-ого роута у меня отсохли пальцы и, очевидно, должно быть решение.
Ответы (1 шт):
Метод AddCors() добавляет конфигурацию для CORS, но больше ничего не делает, т.е. в вашем DI появляется объект конфигурации (CorsOptions) в котором вы говорите, что вы разрешаете любые origin, header, method. Для того, чтобы у вас начал работать CORS нужно использовать также UseCors(), этот метод добавит нужный middleware (CorsMiddleware), который и будет добавлять правильные заголовки (Access-Control-Allow-Origin, Access-Control-Allow-Methods ..., их и ожидает увидеть браузер в ответе) и обрабатывать preflight запросы.
Т.к. вы используете policy не с именем по умолчанию, то вам нужно передавать имя policy: UseCors("MyPolicy") и его нужно вызывать до UseRouting().
