Как избавиться от CORS в .net core 2.2? - PullRequest
0 голосов
/ 26 декабря 2018

Я обновил свой проект до .net core 2.2, и кажется, что CORS создает проблемы, которых не было в 2.1.

Я запускаю свое приложение по этому URL: http://*:5300

Я добавил этот код в Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    ...

    services.AddCors(options =>
                     options.AddPolicy("MyPolicy", builder =>
                     {
                         builder.AllowAnyOrigin()
                                .AllowAnyMethod()
                                .AllowCredentials()
                                .AllowAnyHeader();
                     }));

    services.AddMvc();

    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ...

    app.UseCors(builder =>
    {
        builder.AllowAnyOrigin()
               .AllowAnyMethod()
               .AllowCredentials()
               .AllowAnyHeader();
    });

    app.UseAuthentication();
    app.UseMvc();
}

Это не сработало, поэтому я добавил поверх него атрибут [EnableCors] в моем `BaseController"class:

[EnableCors]
[Authorize]
[Produces("application/json")]
[Route("api/[controller]")]
public class BaseController : Controller
{

}

Но я все еще получаю эту ошибку CORS:

Доступ к XMLHttpRequest в 'http://192.168.15.63:5301/api/permissions/UI' от источника' http://192.168.15.63:5302' заблокирован политикой CORS:
Ответ на запрос предполетной проверки не проходит проверку контроля доступа:
Значение заголовка 'Access-Control-Allow-Origin' в ответе не должно быть подстановочным знаком '*'когда режим учетных данных запроса' включен '.
Режим учетных данных запросов, инициированных XMLHttpRequest, контролируется атрибутом withCredentials.

Что еще можно сделать, чтобы полностью удалить CORS

1 Ответ

0 голосов
/ 26 декабря 2018

Значение заголовка «Access-Control-Allow-Origin» в ответе не должно быть подстановочным знаком «*», если режим учетных данных запроса «include».

Вы не можете использовать и AllowAnyOrigin, и AllowCredentials при использовании ASP.NET Core для ответа на запрос CORS.

Доступ к XMLHttpRequest в «http://192.168.15.63:5301/api/permissions/UI' от источника» http://192.168.15.63:5302' был заблокирован политикой CORS

Это сообщение показывает, что ваш сервер прослушивает http://192.168.15.63:5301, но ваш клиент делает запросот http://192.168.15.63:5302.Поскольку порт отличается, это разные источники, и поэтому используется защита CORS.

Чтобы разрешить запрос, обновите код конфигурации ASP.NET CORS до следующего вида:

builder.WithOrigins("http://192.168.15.63:5302")
    .AllowAnyMethod()
    .AllowCredentials()
    .AllowAnyHeader();

Это настраивает происхождение клиента как поддерживаемого CORS - вы, конечно, можете добавить это как параметр конфигурации к самому приложению (используя, например, appsettings.json), если необходимо.


В сторону:

Поскольку вы позвонили AddCors и настроили именованную политику, нет причин настраивать ту же политику в вызове на UseCors - вы можете простопередайте имя политики, которую вы настроили ранее с помощью AddCors:

app.UseCors("MyPolicy");
...