Angular 10,获取HttpClient POST的响应体



我试图获得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,其中包含我需要访问的响应体。然而,我无论如何也不能把这个放到地图上。我可以在管道中捕获错误并在那里的断点处停止,但是&;error&;在这个响应中,只是[]。

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

请注意,我不一定想在这里抛出错误,我已经尝试过其他方法,但如果错误总是[],那它就没什么用了。

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

ObjectResult(theObjectINeed) { StatusCode = StatusCodes.Status406NotAcceptable }
我基本上只想吞下406并将响应体返回给订阅者。我花了好几个小时搜索如何做到这一点,但是文档很糟糕,大多数搜索结果返回的都是几年前的东西,这可能在某一时刻有效,但不再有效了。

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

一个空的响应体就是你的情况。

模拟API服务是否通过POSTMAN或CURL返回空主体

我的英语不好意思,我来自巴西。

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

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

您可能想要检查您指定的头文件内部发生了什么。如果你有一个身份验证服务,你可能想尝试调用没有头的api,因为它应该在身份验证服务中处理。在文件方面,这也可能是一个后端问题。需要进行彻底的代码检查。

最新更新