Невозможно включить CORS для указанных c контроллеров API в ASP. NET Core WebApp с таргетингом на netcoreapp3.1 - PullRequest
0 голосов
/ 09 февраля 2020

У меня CORS работает нормально в "обычных" контроллерах {controller} / {action} / {id?}. Однако CORS не работает в методах действия с указанными атрибутами c [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();
        }

, а метод Configure выглядит следующим образом:

        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");
            });
        }

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

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

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

Есть мысли?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

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

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

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

0 голосов
/ 09 февраля 2020

Это ваш 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)
{ 
...
}
...