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 шт):

Автор решения: Exploding Kitten

Метод 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().

Docs

→ Ссылка