我尝试使用Angular 2发出一个包含多个标头的HTTP POST请求,但是我发布的数据在我的后端API中以及在我以如下方式修改标头时显示为空:
{
'X-API-KEY': authToken,
'Content-Type': 'text/plain',
'roomName':roomName,
'locationOrCommand':locationOrCommand
}
该请求永远不会在API中显示。 但是,当请求中只有一个标头时,如下所示:
{'X-API-KEY': authToken}
我的api可以获取一个数据(身份验证令牌), 我已经为我的后端API测试了敏捷和邮递员,它工作正常。 我该怎么办?
我尝试了几种构造标头的方法,例如:
{ headers: new HttpHeaders().append('X-API-KEY', authToken).append('roomName',roomName).append('locationOrCommand',locationOrCommand).append('Content-Type', 'text/plain')}
{ headers: new HttpHeaders().set('X-API-KEY', authToken).set('roomName',roomName).set('locationOrCommand',locationOrCommand).set('Content-Type', 'text/plain')}
{ headers: new HttpHeaders().set('X-API-KEY', authToken).append('roomName',roomName).append('locationOrCommand',locationOrCommand).set('Content-Type', 'text/plain')}
除我的API之外,我可以从前端获取发布的数据。
答案 0 :(得分:1)
HttpHeaders是不可变的,因此当您调用append或设置它时,它将返回新对象。
let header = new HttpHeaders();
let other_header = header.append('foo','23');
console.log(header.get('foo')); // output null
console.log(other_header.get('foo')) // output 23
我们有一个示例:
首先,通过有线发送的数据的不变性在其他平台上也很常见。-例如Android / Java世界中的OkHttp客户端。
第二,当通过网络发送数据时,我们让它越过应用程序的边界并将其输入到远程系统中。数据越过边界后,便会发布到世界各地,而不受“我们”的控制。偶然地,我们喜欢应用程序中的数据对象以反映将来将发送的内容或过去已接收的内容。为此,我们需要不可变的东西。换个角度考虑:发送请求并且序列化请求正文之后,我们将修改请求正文对象,然后客户端本地保存的数据与发送到远程的数据不同。它会(有时)会导致傻瓜和可避免的错误。
我还没有找到OkHttp作者的文档或谈话形式,为什么他们选择不可变的。但是,Angular文档-令我惊讶的是-讲述了很多关于不可变对象的设计选择!