Внезапная проблема с CORS в проекте Angular &. NET - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть служба REST на основе. NET Core в качестве бэкэнда и Angular 9 в качестве внешнего интерфейса. Функциональность и взаимодействие работали нормально все время. Сегодня неожиданно, без каких-либо изменений в проекте, он перестал работать. Каждый раз, когда я использую функциональность входа в систему, я получаю исключение:

Доступ к XMLHttpRequest в исходном локальном хосте был заблокирован политикой CORS: заголовок «Access-Control-Allow-Origin» отсутствует в запрашиваемый ресурс.

Мой бэкэнд позволяет использовать CORS:

    services.AddCors(options =>
    {
        options.AddPolicy("CorsPolicy",
            builder => builder.WithOrigins("http://localhost:4200")
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());
    });

Функциональность входа angular:

@Injectable()
export class AuthService {
  login(credentials) {
    sessionStorage.removeItem('token');

    this.isBusy = true;

    this.http.post<any>(this.loginUrl, credentials, { observe: 'response' }).subscribe(res => {   

      this.authenticate(res.body);

    }, error => { 
      sessionStorage.removeItem('token');
      this.router.navigate(['/logout'])
    })
  }


  authenticate(res) {
    sessionStorage.setItem('token', res);

    this.router.navigate(['/']);
  }
}

Я не Я не понимаю, почему он вдруг перестал работать, если он работал нормально в течение нескольких месяцев. Пожалуйста, сообщите.

1 Ответ

0 голосов
/ 20 апреля 2020

Порядок промежуточного программного обеспечения в ASP. NET Ядро может быть проблемой. Cors должен быть перед любым добавлением контроллеров или MVC.

// Correctly applies Cors
services.AddCors();
services.AddControllers();

// Doesn't apply Cors
services.AddControllers();
services.AddCors();

То же самое относится к вашему вызову Configure(IApplicationBuilder, IWebHostEnvironment). Обычно я делаю app.UseCors() первой строкой этого метода.

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