Добавьте определенные заголовки для каждого запроса в Angular

#angular #http-headers #angular-http-interceptors

Вопрос:

Если у меня есть перехватчик, который добавляет заголовки для каждого запроса, но в каждом запросе я должен добавлять дополнительные заголовки, относящиеся к каждому запросу, как я могу добавить эти заголовки?

(Я опускаю импорт 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);
  }
}
 

Ответ №1:

Тогда вы могли бы попробовать это :

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

Комментарии:

1. является post(URL,data,{headers:headers})

2. @Eliseo, в машинописном тексте (я думаю, что ECMA6 также), если у вас есть объект, у которого есть атрибут, значение которого имеет другой объект с тем же именем атрибута, вы можете оставить только имя атрибута. const MyObject={…}; antotherObjetc{attr1:1,attr2:’пример’, MyObject: MyObject } совпадает с antotherObjetc{attr1:1,attr2:’пример’, MyObject }

3. Привет @Emilien, я поместил ваше решение в 2 разных проекта, и оно не работает :(. Можно видеть только заголовки перехватчиков.

Ответ №2:

Я, наконец, смог решить эту проблему. Читая эту статью, я смог понять, что HttpHeaders неизменяемы, поэтому для решения @Emilien нужно было бы изменить только следующее:

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

Спасибо!