Не удается включить CORS для определенных контроллеров API в веб-приложении ASP.NET Core, нацеленном на netcoreapp3.1

У меня CORS нормально работает в "обычных" контроллерах {controller} / {action} / {id?}. Однако CORS не работает в методах действий с определенными атрибутами [Route ("routname")].

Пример контроллера с маршрутом:

[Route("api/[controller]")]
[ApiController]
public class CustomerController : ControllerBase
{

[HttpPost]
public async Task<ActionResult<Guid>> Post([FromBody] Customer value)
{
...
}

[HttpPost]
[Route("payment")]
public async Task<ActionResult<CustomerPaymentResponse>> Pay([FromBody] CustomerPaymentRequest value)
{ 
...
}

Мой метод ConfigureServices в файле startup.cs выглядит так:

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(c =>
            {
                c.AddPolicy("AllowAnyOrigin", options => options
                    .AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader());
            });

            services.AddRouting();           

            services.AddControllers();
        }

и метод настройки выглядит так:

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseRouting();

            app.UseCors();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();
            app.UseAuthentication();
            app.UseAuthorization();

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

Если я отправляю сообщение на / api / customer, CORS работает.

Если я отправляю сообщение на / api / customer / payment, CORS не работает (Chrome сообщает: «... был заблокирован политикой CORS: ответ на предварительный запрос не проходит проверку контроля доступа: Нет» Заголовок Access-Control-Allow-Origin 'присутствует в запрошенном ресурсе. ")

Я выполнил предоставленный ответ для Не могу включить CORS для определенных контроллеров API в ASP.NET Core WebApp, нацеленном на netcoreapp3.0, но проблема все еще остается для меня.

Есть предположения?


person Federico    schedule 08.02.2020    source источник
comment
Вы можете отправить в / payment. Он должен работать. Итак, ваша проблема CORS на самом деле связана с маршрутизацией.   -  person Nikolaus    schedule 09.02.2020
comment
Вы пробовали использовать EnableCorsAttribute на контроллере?   -  person Nikolaus    schedule 09.02.2020


Ответы (2)


Это ваш атрибут RouteAttribute: с Asp.Net-Framework это может работать:

[HttpPost]
[Route("payment")]

public async Task<ActionResult<CustomerPaymentResponse>> Pay([FromBody] CustomerPaymentRequest value)
    { 
    ...
    }

Но с Core вам это нужно, потому что с Route атрибут RouteAttribute контроллера переопределяется:

[HttpPost ("payment")]
public async Task<ActionResult<CustomerPaymentResponse>> Pay([FromBody] CustomerPaymentRequest value)
{ 
...
}
person Nikolaus    schedule 08.02.2020
comment
Спасибо, Николаус. Я пробовал это, но, к сожалению, проблема остается. - person Federico; 09.02.2020

Отвечая на свой вопрос. Я нашел это сообщение: Проблемы с политикой CORS и .NET Core 3.1

У меня была ошибка в моем методе оплаты.

Как говорится в этом сообщении, иногда ошибки на стороне сервера .NET, не относящиеся к CORS, могут быть возвращены как ошибки CORS.

person Federico    schedule 10.02.2020