Ответ httpclient имеет значение null, если API возвращает код состояния 204

У меня есть конечная точка отдыха /Products/latest, которая возвращает 204, если продуктов нет, и следующий общий сервис angular:

  getFromAPI(url: string) {
    const params = new HttpParams();

    return this.http
        .get(url, { params: params })
        .catch((err: HttpErrorResponse) => {
            console.error(`Backend returned code ${err.status}, body was: ${err.error}`);                  
            return Observable.of([]);
        });
  }

а также

 getFromAPI() {
        return this.masterService.get('/Products/latest').map((res: Response) => {
            if (res.status === 204) {
                return Observable.of([]);
            } else {
                return res;
            }

        });
    }

Однако, когда сервисы приводят к коду 204, я получаю следующую ошибку:

TypeError: невозможно прочитать свойство status со значением null.

Как такое могло случиться? Почему весь ответ равен нулю, если API отвечает 204?


person user66875    schedule 06.12.2018    source источник
comment
попробуйте в методе catch   -  person Sachila Ranawaka    schedule 06.12.2018


Ответы (1)


Прежде всего, я бы сказал, что странно (или неправильно), что ваш бэкэнд вместо этого возвращает 204 для пустой коллекции. из 200 вместе с пустым списком.

Используя Angular7 и RxJS6, я создал тестовый пример, в котором мой бэкэнд настроен следующим образом:

[HttpGet("/Products/latest")]
public async Task<NoContentResult> list()
{
  return NoContent();
}

В интерфейсе с использованием:

public getFromAPI() {
  return this.httpClient.get('/Products/latest', { observe: 'response' }).pipe(
    switchMap(res => res.status === 204 ? of([]) : of(res))
  ).subscribe();
}

И ответ явно содержит статус, несмотря на отсутствие тела:

введите описание изображения здесь

Ваша проблема может заключаться в this.masterService, который, похоже, проксирует ваш http-клиент и проглатывает некоторые свойства?

person B12Toaster    schedule 06.12.2018