【问题标题】:Angular 10, get Response body of a HttpClient POSTAngular 10,获取 HttpClient POST 的响应正文
【发布时间】:2021-08-11 10:27:20
【问题描述】:

我正在尝试获取 HttpClient Post 请求的响应正文。这就是我现在所处的位置,尽管我已经根据网上数百个令人沮丧的无用示例尝试了十几种不同的变体。

  return this._http
  .post<HttpResponse<any>>(
    apiURL,
    request,
    {
      headers: new HttpHeaders({
        'Content-Type': 'application/json'
      }),
      observe: 'response' as 'body'
    }
  )
  .pipe(
    map((response: HttpResponse<any>) => {
      if (response.status === 200 || response.status === 406) {
        return response.body as RequestResponse;
      }
      throw Error("There was an error processing your request.");
    })
  );

我无法控制的 API 返回 406,其中包含我需要访问的响应正文。但是,我这辈子都不能让它进入那里的地图。我可以在管道中捕获错误并在那里的断点处停止,但该响应中的“错误”只是 []。

    catchError((error: HttpErrorResponse) => {
       return throwError(error); <-- error is always [];
    })

请注意,我不一定想在那里 throwError,我已经尝试过其他方法,但如果 error 始终为 [],那么它无论如何都没用。

api 本身是一个 C# azure 函数,并返回:

ObjectResult(theObjectINeed) { StatusCode = StatusCodes.Status406NotAcceptable }

我基本上只想吞下 406 并将响应正文返回给订阅者。我一直在寻找如何做到这一点的几个小时,但文档太糟糕了,而且大多数搜索结果返回的都是多年前的东西,这可能在某个时候有效,但不再有效。

【问题讨论】:

    标签: angular angular-httpclient


    【解决方案1】:

    406的响应体是API服务必须提供的东西,在某些情况下根据API开发可以为空。

    一个空的响应正文就是您的情况。

    模拟看API​​服务是通过POSTMAN还是CURL返回一个空body

    对不起,我的英语不好,我来自巴西。

    【讨论】:

      【解决方案2】:

      406 Not Acceptable 是一个 HTTP 响应状态代码,表示客户端已使用服务器无法满足的 Accept-headers 请求响应。这通常是由于用户代理(即浏览器)指定了一个可接受的字符集(通过 Accept-Charset)、语言(通过 Accept-Language)等,而服务器无法提供这样的响应回复。

      礼貌:https://airbrake.io/blog/http-errors/406-not-acceptable

      您可能想检查您指定的标头中的内容。如果您有身份验证服务,您可能想尝试在没有标头的情况下调用 api,因为它应该在身份验证服务中处理。在 fil 方面,这也可能是后端问题。需要进行彻底的代码检查。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 2019-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        相关资源
        最近更新 更多