首页 > 解决方案 > 当 API 返回 204 状态码时,httpclient 响应为空

问题描述

我有一个休息端点/Products/latest,如果没有产品,它会返回 204,以及以下通用角度服务:

  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:无法读取 null 的属性“状态”

这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?

标签: angularangular-httpclient

解决方案


首先,我会说您的后端为空集合返回 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 客户端并吞下了一些属性?


推荐阅读