Сервер не добавляет заголовок ответа Access-Control-Allow-Origin к ответу об ошибке 400 - PullRequest
0 голосов
/ 09 декабря 2018

Я уже давно борюсь с этой проблемой.У меня есть промежуточное программное обеспечение в моем веб-API .NET Core, которое отправляет удобное сообщение об ошибке на основе кода ошибки, возвращенного моим SQL Server.

Это прекрасно работает в Postman и когда я отключаю ту же политику происхождения дляChrome Отсюда

Так что это довольно веское доказательство того, что это проблема CORS.Пройдя много постов по проблемам, я все еще не смог решить проблему.

ВОПРОС:

Если я добавлю Allow-Control-Allow-Originрасширение в Chrome здесь , все работает как положено.Всем ли пользователям моего приложения понадобится установить это в своих браузерах, чтобы получать правильные ошибки во внешнем интерфейсе?Это моя самая большая проблема.Вот моя конфигурация ниже:

Политика в запуске Web API

app.UseCors(builder => builder
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());

Я зарегистрировал ее до MVC

services.AddCors();
services.AddMvc();

Это мой метод в Angular

  addNewPeopleCategory(
    personCategory: CreatePeopleCategory
  ): Observable<CreatePeopleCategory> {
    return this.http
      .post<CreatePeopleCategory>(this.url + "/create", personCategory)
      .pipe(catchError(this.handleErrorUpdate.bind(this)));
  }

Это мой метод обработки ошибок в Angular

 private handleErrorUpdate(errorResponse: HttpErrorResponse) {
    if (errorResponse.error instanceof ErrorEvent) {
      console.log("Client Side Error: ", errorResponse.error.message);
    } else {
      console.log("Server Side Error: ", errorResponse);
    }

    this.openSnackbar(errorResponse.error);
    return throwError(
      "There is an issue with the service. Please try again later.
    );
  }

Когда CORS не отключены

enter image description here

Когда CORS отключены в Chrome

enter image description here

1 Ответ

0 голосов
/ 09 декабря 2018

Проблема была не в том, как я обрабатывал CORS на сервере, а в том, что промежуточное программное обеспечение использовалось для обработки ошибок.

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

context.Response.Clear();

Удаление этой строки немедленно исправило мои проблемы с CORS.Кто-то, кто прокомментировал внизу поста, сообщил мне об этом.Из того, что я собираю, эта строка очистит заголовки CORS от ответа, а затем переназначит мой указанный код состояния и тип содержимого.

Вы захотите оставить все остальное в классе таким же.

...