Политика CORS, блокирующая запросы POST к API - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь развернуть приложение, которое я создал онлайн. Пользовательский интерфейс создается с использованием vue.js и вызывает API, написанный в ядре dotnet. Я использую dotnet core 2.2.

Веб-проект и API находятся на разных серверах и доступны в разных доменах, веб-проект размещается на Netlify, если это имеет значение. Мне удалось настроить политику CORS, чтобы локально все работало нормально. Когда я получаю доступ к приложению на веб-сервере, я получаю ошибки CORS всякий раз, когда я публикую данные. Мои GET и DELETE запросы работают просто отлично.

Вот моя политика CORS

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("Default", builder =>
        {
            builder.WithOrigins(/* the domain where my web project is hosted */);

            builder.AllowAnyMethod();
            builder.AllowAnyHeader();
            builder.AllowCredentials();
        });
    });
}

Так что я думаю, что все должно быть в порядке. AllowCredentials требуется, потому что я использую SignalR, который в противном случае не сработал бы.

Сообщение об ошибке в инструментах разработки:

POST [моя конечная точка API] 400 (BadЗапрос)

Доступ к XMLHttpRequest в «[моей конечной точке API] из источника» https://xxx.netlify.com' заблокирован политикой CORS: в заголовке «Access-Control-Allow-Origin» нет заголовказапрашиваемый ресурс.

И когда я заглядываю в консоль, где выполняется мой проект dotnet, я вижу следующее сообщение об ошибке

Идентификатор соединения "0HLQNTR19GE1T" неверные данные запроса: "Запросы с «Connection: Upgrade» не могут содержать содержимое в теле запроса ». Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: запросы с «Connection: Upgrade» не могут иметь содержимое в теле запроса. в Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException.Throw (причина RequestRejectionReason) в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1MessageBody.For (HttpVersion httpVersion, Http. .Server.Kestrel.Core.Internal.Http.Http1Connection.CreateMessageBody () в Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests [TContext] (приложение IHttpApplication`1.Ser. Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequestsAsync [TContext] (приложение IHttpApplication`1)

До сих пор я пытался установить заголовок Access-Control-Allow-Origin = "*" через файл netlify.toml, используя [EnableCors] атрибут моего действия контроллера. Я отредактировал свой запрос AJAX (axios) и установил withCredentials: true и вообще много играл с политикой CORS. К сожалению, без удачи, и у меня заканчиваются идеи.

Я рад любым предложениям.

1 Ответ

1 голос
/ 23 октября 2019

Проверьте в файле nginx.conf строку с именем proxy_set_header и установите для нее Connection $http_connection

...