Запрос CORS отклоняется, несмотря на правильные заголовки - PullRequest
0 голосов
/ 26 февраля 2019

В моей настройке ASP.Net Core 2.2 у меня есть метод для создания политики «разрешить все» CORS

public static IServiceCollection AddAllowAllCors(this IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll", builder =>
        {
            builder.AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials()
                    .SetIsOriginAllowed(_ => true);

        });
    });
    return services;
}

, которая добавляется в ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
...
    services.AddAllowAllCors();
...
}

Который я активирую в своем методе Configure:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    app.UseCors("AllowAll");
    ...
}

Когда я пытаюсь сделать запрос PUT из моего приложения React, запрос OPTIONS выглядит в Chrome следующим образом: OPTIONS request

Но фактический запрос PUT завершается с ошибкой 405: PUT request

Это несмотря на то, что заголовок Access-Control-Allow-Origin в ответе OPTIONS должен быть разрешен.Это работало в 2.1, но не в 2.2.Точное сообщение об ошибке:

Доступ к выборке в 'MY_REQUEST_URI' был заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок 'Access-Control-Allow-Origin'.Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Я также пытался удалить AllowCredentials() в политике, но это не помогло.не имеет значения.

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Похоже, ваша конфигурация CORS в порядке.Но нет фактического обработчика PUT.Вы должны сначала проверить свой API с каким-нибудь клиентом для отдыха, таким как почтальон или ARC, а затем подумать о CORS.

0 голосов
/ 27 февраля 2019

Сочетание отключения новой функции Маршрутизация конечной точки и отключения модуля WebDav в IIS устранило эту проблему для меня.Я полагаю, что из-за маршрутизации конечной точки мои предварительные запросы фактически обрабатывались модулем WebDav, а не моим приложением.

Чтобы отключить маршрутизацию конечной точки, установите флаг false в .AddMvc():

services.AddMvc(options =>
    {
        ...other options
        options.EnableEndpointRouting = false;
    })
0 голосов
/ 26 февраля 2019
public static IServiceCollection AddAllowAllCors(this IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll", builder =>
        {
            builder.AllowAnyHeader()
                    .AllowAnyMethod()
                    .AllowCredentials()
                    .AllowAnyOrigin();

        });
    });
    return services;
}
...