Почему у меня возникает ошибка CORS при вызове API - PullRequest
0 голосов
/ 05 марта 2020

Я использую Angular во внешнем интерфейсе и C# в качестве моего бэкэнда. Я получаю эту ошибку при попытке отредактировать поля и сохранить ее:

Access to XMLHttpRequest at 'http://192.168.220.14:81/api/registry' from origin 'http://artc.tj' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

PUT http://192.168.220.14:81/api/reg polyfills-es2015.23e79c711e3c227d781f.js:1 PUT http://192.168.220.14:81/api/registry net::ERR_FAILED

Ошибка Scrinshot

Startup.cs:

 public void ConfigureServices(IServiceCollection services)
 {
     //CORS
     services.AddCors(options =>
     {
         options.AddPolicy(MyAllowSpecificOrigins,
         builder =>
         {
             builder.WithOrigins("http://localhost",
                                 "http://localhost:4200",
                                 "http://artc.tj",
                                 "http://192.168.220.14")
                                    .AllowAnyMethod()
                                    .AllowAnyHeader()
                                    .AllowCredentials();
         });
     });
  }

Ответы [ 3 ]

1 голос
/ 05 марта 2020

Убедитесь, что вы используете Cors() в вашем Configure методе.

Startup.cs

public class Startup
{
   //...
   readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

   public void ConfigureServices(IServiceCollection services)
   {
      //...
         services.AddCors(options =>
         {
             options.AddPolicy(MyAllowSpecificOrigins,
             builder =>
             {
                 builder.WithOrigins("http://localhost:4200")
                     .AllowAnyHeader()
                     .AllowAnyMethod()
                     .AllowAnyOrigin();
             });
         });
      //...
   }

   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
   {
      //...
      app.UseCors(MyAllowSpecificOrigins);
      //...
   }
   //...
}

PS Также обязательно включите withCredentials: false в запрос клиента httpOptions

1 голос
/ 05 марта 2020

Я думаю, что вы пропускаете заголовок при отправке запроса со стороны Angular. Вот что я обычно делаю:

Startup.cs

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

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

Angular Запрос:

callAPI() {
   return this.httpClient
            .get(API_URL, {headers: {'Access-Control-Allow-Origin' : '*'}});
}
0 голосов
/ 05 марта 2020

Ты не. Сервер, к которому вы обращаетесь, должен внедрить CORS для предоставления доступа JavaScript с вашего сайта. Ваш JavaScript не может предоставить себе разрешение на доступ к другому веб-сайту.

Используйте расширение CORS из веб-магазина браузера chrome.

Надеюсь, что это может изменить ваше восприятие

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