HttpHeaders在Angular中设置还是追加

时间:2018-11-26 20:58:37

标签: angular http-headers angular-httpclient

我有一个缓存拦截器,用于检查请求中是否存在x-refresh头。如果是这样,它将忽略此端点的任何缓存的请求/响应组合,然后转到服务器。但是,在服务调用中使用它时,必须使用Angular的append(...)类上的set(...)方法而不是HttpHeaders方法。我无法从文档或在线搜索中找出原因。 req.headers.get(x-refresh)仅在使用append('x-refresh', '')时返回我期望的结果。如果我使用req.headers.get('x-refresh')set('x-refresh', '')不会返回任何内容。这是为什么?我查看了此源代码,但看不到任何会改变这种行为的东西,但是我假设它被我忽略了。

set和除set之外的append之间有什么区别,如果已经存在,将用该键覆盖标头,否则进行设置,而如果允许附加到该标头,则append将附加到该标头?

2 个答案:

答案 0 :(得分:0)

我想在评论中说的是,鉴于您提出问题的动力正在解决编码难题,因此发布代码有助于社区回答您的问题并分享知识。即提出一个好的问题,得到一个好的答案。

但是,如果您只想让别人解释set与append之间的区别,那么您要假设您真正想知道的是为什么在代码的其他地方没有问题没有在您的实现中“设置”工作。也就是说,您最终对总体差异不感兴趣。

就我们所知,也许您的语法在某些未发布的代码行中已关闭。请查看此相关问题,以查看以下示例:Set Headers using append or set does not work in Angular 2。在碰到的特定角度版本中,set vs.append上也可能存在错误。无论哪种情况,我都希望您能明白为什么偏重于通用性无济于事。

发布代码时,最好将其放置在stackblitz等上,这使社区成员可以更好地响应,因为我们看到了完整图片(之前的代码,有角度的版本等),并从不同角度进行了故障排除。而且,如果存在可重现的错误,也许它实际上值得在github上购买角度项目本身的票。

答案 1 :(得分:0)

Headers接口的append()方法将新值附加到Headers对象内现有的标头上,或者如果标头不存在则添加标头。

set()append()之间的区别在于,如果指定的标头已经存在并接受多个值,则set()将用新值覆盖现有值,而{{1} }会将新值附加到值集的末尾。