【问题标题】:Add specific headers for each request in Angular在 Angular 中为每个请求添加特定的标头
【发布时间】:2021-09-28 23:58:30
【问题描述】:

如果我有一个为每个请求添加标头的拦截器,但在每个请求中我必须添加特定于每个请求的附加标头,我该如何添加这些标头?

(我省略了 httpClient 和其他的导入)

// any.interceptor.service.ts

intercept(req: HttpRequest<any>, next: HttpHandler) {
  const authToken = this.auth.getAuthorizationToken();
  const authReq = req.clone({
    headers: req.headers.set('Authorization', authToken)
  });
  return next.handle(authReq);
}
// my.service.ts

@Injectable({
provideIn: 'root'
})
export class MyService {
  send(data: AnyInterface) {
    // *******************
    // adding HERE additional specific headers
    // *******************
    this.http.post(URL, data);
  }
}

【问题讨论】:

    标签: angular http-headers angular-http-interceptors


    【解决方案1】:

    那你可以试试这个:

    send(data: AnyInterface) {
        const headers = new HttpHeaders();
        headers.set('YOUR_HEADER_KEY', 'YOUR_HEADER_VALUE');
        this.http.post(URL, data, { headers });
      }
    

    【讨论】:

    • post(URL,data,{headers:headers})
    • @Eliseo,在打字稿中(我猜 ECMA6+ 也是如此),如果你有一个对象,它有一个属性,它的值是其他具有相同属性名称的对象,你可以只留下属性名称.常量 myObject={...}; antotherObjetc{attr1:1,attr2:'example', myObject: myObject } 与 antotherObjetc{attr1:1,attr2:'example', myObject } 相同
    • 嗨@Emilien,我已将您的解决方案放在2个不同的项目中,但它不起作用:(。只能看到拦截器标题。
    【解决方案2】:

    我终于能够解决这个问题。 Reading this article我能够理解HttpHeaders是不可变的,所以@Emilien的解决方案只需要修改以下内容:

    send(data: AnyInterface) {
      const headers = new HttpHeaders().set('YOUR_HEADER_KEY', 'YOUR_HEADER_VALUE');
      this.http.post(URL, data, { headers });
    }
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-10
      • 2016-03-31
      • 2021-07-03
      • 1970-01-01
      • 2010-12-06
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多