响应体为空,状态码为200。

10

我正在使用Angular的新HttpClient进行请求。当我使用旧版本http时,我的组件可以正常返回文本内容,但现在文本内容为null。我无法弄清楚问题所在,服务器确实已经发送了响应,但我一直收到null作为响应体。

响应的其他部分都是正常的,如状态码200等。put和delete都需要纯文本的成功消息。我还尝试使用.body方法获取响应体文本,但也返回null。

服务:

constructor(private http: HttpClient) {}

    sendAllow(country, allow) {
        if (allow === 1) {
            return this.http.put(`http://${this.address}/rest/geodrop/config/` +
                                 `${country}`, { observe: 'response' });
        } else {
            return this.http.delete(`http://${this.address}/rest/geodrop/config/` +
                                    `${country}`, { observe: 'response' });
        }
    }

组件:

this.whiteListService.sendAllow(a, b)
            .subscribe(
                (response) => console.log(response),
                (error) => {
                    console.log(error);
                }
        );

有两个HTTP请求,一个是“PUT”,一个是“DELETE”,哪一个返回了意外的“null”文本?期望的正文文本是什么? - shaochuancs
两者都应该返回一个简单的文本成功消息,用于put或delete。 - FussinHussin
URL是否公开?我们可以尝试进行“PUT”或“DELETE”请求吗? - shaochuancs
URL不是公共的,我希望这是一个普遍的问题。我不确定为什么使用http可以,而不是httpClient。我会保持更新此线程。 - FussinHussin
当我使用curl请求来测试节点时,我在终端中得到了文本响应。我不理解。 - FussinHussin
1个回答

15

问题在于Angular期望得到JSON响应。将响应更改为文本类型,如下所示:

return this.http.put(`http://${this.address}/rest/geodrop/config/` +
                     `${country}`, { responseType: 'text', observe: 'response' });

1
很高兴它有帮助哈哈。我当时发布的时候觉得这是一个愚蠢的问题,因为没有人关注。后来我自己解决了,几个月后它正在帮助别人。很高兴知道它不是无用的。 - FussinHussin
谢谢你让我头疼,当我将接受/内容标头更改为“文本”,但在订阅中得到了一个空值! - Michael Harper
当然没问题 @MichaelHarper - FussinHussin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接