Реагировать + ASP. Net Ядро 3: Ответ CORS на запрос предварительной проверки не проходит проверку контроля доступа: нет заголовка «Access-Control-Allow-Origin» - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь настроить интерфейс реакции для связи с. net сервером. Однако я, кажется, застрял на настройке cors. Ниже у меня есть мой стартовый код из внутреннего проекта, а также код из моего внешнего интерфейса. Я следовал за несколькими руководствами, и я не уверен, где я напутал, это работало на моем локальном хосте ранее, но не при развертывании в облаке. (инструкции, которые я выполняю: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-3.1 и https://code-maze.com/enabling-cors-in-asp-net-core/)

Спасибо за помощь!

Ошибка из консоли React App: Доступ извлечение в 'https://backend.azurewebsites.net/api/accountcredentials' от источника 'https://frontend.azurewebsites.net' было заблокировано политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: Нет 'Access- Заголовок Control-Allow-Origin 'присутствует в запрашиваемом ресурсе. Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Код запуска в asp. net проекте:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .AddNewtonsoftJson();

        services.AddSingleton<UserService>();
        services.AddSingleton<AccountService>();

        services.AddCors(o => o.AddPolicy("ReactPolicy", builder =>
        {
            builder.AllowAnyOrigin() //dev
                   //.WithOrigins("http://localhost:3007") // dev
                   //.WithOrigins("https://frontend.azurewebsites.net")
                   .AllowAnyMethod()
                   .AllowAnyHeader()
                   .AllowCredentials();
        }));
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();

        app.UseRouting(routes =>
        {
            routes.MapControllers();
        });

        app.UseCors("ReactPolicy");

        app.UseAuthorization();
    }

Атрибуты класса контроллера:

  [Produces("application/json")]
    [Route("api/[controller]")]
    [ApiController]
    [EnableCors("ReactPolicy")]

1 Ответ

0 голосов
/ 19 января 2020

попробуйте так:

    readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

    public void ConfigureServices(IServiceCollection services)
    {
        ...

        services.AddCors(options =>
        {
            options.AddPolicy(MyAllowSpecificOrigins,
            builder =>
            {
                builder.SetIsOriginAllowed(isOriginAllowed: _ => true).AllowAnyHeader().AllowAnyMethod().AllowCredentials();
            });
        });

        ...
     }


    public void Configure(IApplicationBuilder app, IHostEnvironment env)
    {

        ...

        app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor |
                   ForwardedHeaders.XForwardedProto
        });

        app.UseCors(MyAllowSpecificOrigins);

        ...

    } 

отредактируйте MyAllowSpecificOrigins на ваше имя cors

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...