Ошибка CORS работает только для одного контроллера - PullRequest
0 голосов
/ 18 февраля 2020

Я работаю над базовым веб-интерфейсом do tnet.

Мой API размещен на localhost: 44366, а мое клиентское приложение размещено на http://127.0.0.1: 5501 / (используя vs code live server)

Я делаю два запроса POST с помощью кнопки отправки. Ранее я сталкивался со следующей проблемой, когда выполнял один запрос POST:

Access to XMLHttpRequest at 'https://localhost:44366/api/surveycreatoroptions' from origin 
'http://127.0.0.1:5501' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is 
present on the requested resource.

Я пробовал метод [EnableCors ("AllowMyOrigin")] на обоих контроллерах.

Он работает для первого запроса, но не для второго запроса (с той же ошибкой)

Это то, что я использовал для включения CORS

 services.AddCors(options =>
            {
            options.AddPolicy("AllowMyOrigin",
             builder => builder.WithOrigins("http://127.0.0.1:5501").AllowAnyMethod().AllowAnyHeader())
             ;
            });

        }

Как я могу заставить его работать для обоих запросов.

Ответы [ 3 ]

1 голос
/ 19 февраля 2020

Я столкнулся с вашей проблемой. Для решения этой проблемы сначала добавьте этот код в startup.cs

public void ConfigureServices(IServiceCollection services)
{
     services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
     {
      builder.AllowAnyMethod()
             .AllowAnyHeader()
             .AllowAnyOrigin()
             .AllowCredentials();
        }));
        services.Configure<MvcOptions>(options =>
        {
            options.Filters.Add(new CorsAuthorizationFilterFactory("MyPolicy"));
        });
  }}

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, DiagnosticListener diagnosticListenerSource, DiagnosticObserver diagnosticObserver)
 {
        app.UseCors("MyPolicy");
 }

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

Пример машинописного текста:

fetch(window.appSettings.API_URL + path, {
        redirect: 'follow',
        method,
        body: data === null ? null : JSON.stringify(data),
        headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
            Authorization: 'Bearer ' + bToken,
        },
    });

Вы можете изменить происхождение, если хотите для безопасности

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

Вы можете использовать приведенный ниже код в методе ConfigureServices

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

и в методе Configure использовать

app.UseCors("CorsPolicy");
0 голосов
/ 19 февраля 2020

Попробуйте этот код, чтобы увидеть, работает ли он для вас

public void ConfigureServices(IServiceCollection services)
{
      services.AddCors();
      services.AddMvc();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseCors(
        options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
    );

    app.UseMvc();
}
...