You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中设置Bearer JWT令牌请求接口仍报401错误如何解决

问题根因

Angular 内置的 HttpHeaders 是不可变对象,所有调用 append()、set() 等修改请求头的方法,都不会在原实例上生效,只会返回更新后的新 HttpHeaders 实例。
你的代码中调用 headers.append()、headers.set() 后没有接收返回的新实例,最终传入请求的是初始创建的空headers对象,实际没有携带Authorization认证头,因此接口返回401未授权错误。
另外代码开头存在冗余笔误:方法外单独写的let token = localstorage.get('token');存在拼写错误(localstorage应为localStorage,get应为getItem),且方法内部已经重新获取token,这行代码可以直接删除。

修正方案

直接链式调用set方法构造请求头,把最终生成的新实例传入请求即可,修正后的代码如下:

getCategories() : Observable<any> {
  const token = localStorage.getItem("token");

  const headers = new HttpHeaders()
    .set('Content-Type', 'application/json')
    .set('Authorization', `Bearer ${token}`);

  return this.http.get(this.CategoriesUrl, { headers });
}
优化建议
  • 调试请求类问题时,可以直接打开浏览器开发者工具的「网络」面板,查看对应请求的实际请求头载荷,能快速定位是头未携带、参数错误还是接口侧问题。你这个场景下Postman可以正常请求,说明token本身权限有效,问题只出在前端请求构造环节。
  • 如果项目中大部分接口都需要携带token认证,推荐使用Angular的HTTP拦截器统一注入Authorization头,不需要在每个接口方法中重复构造headers,减少冗余代码和出错概率。

内容的提问来源于stack exchange,提问作者jo1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:48:16