. NET Core 3.1 CORS не работает в веб-интерфейсе Ember (3.12) - PullRequest
4 голосов
/ 02 марта 2020

Я мигрирую. NET Core Web API с 2.2 на 3.1. Я следовал инструкциям по миграции Microsoft и разместил промежуточное ПО CORS между UseRouting и UseEnpoints. Тем не менее, я все еще получаю ошибки CORS.

В методе ConfigureServices у меня есть:

services.AddCors();

В методе Configure у меня есть:

app.UseRouting();

app.UseCors(options => options
        .AllowAnyOrigin()
        .AllowAnyHeader().AllowAnyMethod()
    );

app.UseAuthentication();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

Ошибка консоли в веб-браузере:

Запрещен запрос перекрестного источника: та же политика происхождения запрещает чтение удаленного ресурса по адресу http://localhost: 5000 / users / login . (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»).

Запрос перекрестного источника заблокирован: та же политика происхождения запрещает чтение удаленного ресурса в http://localhost: 5000 / users / Войти . (Причина: запрос CORS не выполнен).

Диагностика:

Я пытался следовать документации Microsoft Включить запросы кросс-происхождения (CORS) в ASP. NET Core , но он использует устаревшие ссылки, такие как; Используйте Mvc и IHostingEnvironment.

Я пытался создать новый веб-API и Ember Web-UI, но это тоже не сработало. Вы можете найти простой пример Getting-Start-with-Ember- js -and- net -core-3

Есть идеи, что вызывает проблему?

Идеальная награда за вознаграждение go ответит, что работает. Желательно, чтобы рабочий проект был опубликован на Git.

Примечание: я разрешаю любое происхождение прямо сейчас, чтобы я мог заставить его работать. В конечном итоге для этого потребуется работа с веб-интерфейсом пользователя, который находится на http://localhost:4200

Обновление

Получен код состояния HTTP 405 - метод не разрешен. Рассматриваемый метод является методом OPTIONS.

1 Ответ

4 голосов
/ 05 марта 2020

Документ переноса с версии 2.2 на 3.0. NET неверен . Вызов UseCors(); должен быть сделан перед функцией UseRouting(). Я пошел дальше и добавил его до UseHttpsRedirection(), когда увидел это в реализации на другом сайте.

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#migrate -startupconfigure

В ConfigureServices

services.AddCors(options =>
{
    options.AddPolicy("CorsApiPolicy",
    builder =>
    {
        builder.WithOrigins("http://localhost:4200")
            .WithHeaders(new[] { "authorization", "content-type", "accept" })
            .WithMethods(new[] { "GET", "POST", "PUT", "DELETE", "OPTIONS" })
            ;
    });
});

In Configure

app.UseCors("CorsApiPolicy");

//app.UseHttpsRedirection(); 

app.UseJsonApi();

app.UseRouting();

app.UseAuthentication();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});
...