HttpInterceptor
を使用して、アプリがAPIに対して行う各HTTPリクエストにいくつかのヘッダーを追加する方法を学習しようとしています。私はこのインターセプターを持っています:
import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class fwcAPIInterceptor implements HttpInterceptor {
intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authReq = req.clone({
headers: req.headers.set('Content-Type', 'application/json')
});
console.log('Intercepted HTTP call', authReq);
return next.handle(authReq);
}
}
'Content-Type'
ヘッダーとは別に、'Authorization'
を追加する必要がありますが、それを行う方法はありません(Angular HttpHeadersのドキュメントはメソッドのリストであり、説明)。
どうすればいいですか?ありがとう!
@Injectable()
export class fwcAPIInterceptor implements HttpInterceptor {
intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authReq = req.clone({
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': 'my-auth-token'
})
});
console.log('Intercepted HTTP call', authReq);
return next.handle(authReq);
}
set
メソッドは毎回headersオブジェクトを返すため、これを行うことができます。これにより、傍受したリクエストの元のヘッダーも保持されます。
const authReq = req.clone({
headers: req.headers.set('Content-Type', 'application/json')
.set('header2', 'header 2 value')
.set('header3', 'header 3 value')
});
前述のように、受け入れられたメソッドはヘッダーをオーバーライドします。ヘッダーを追加するには、 APIドキュメント からのアプローチが好きです:
const authReq = req.clone({ setHeaders: { Authorization: authToken } });
const modifiedReq = req.clone({
url: this.setUrl(req.url),
headers: this.addExtraHeaders(req.headers)
});
そして方法:
private addExtraHeaders(headers: HttpHeaders): HttpHeaders {
headers = headers.append('myHeader', 'abcd');
return headers;
}
メソッド.appendは、新しいHttpHeadersオブジェクトを作成し、myHeaderを追加して、新しいオブジェクトを返します。
このソリューションを使用すると、ヘッダーが上書きされないため、複数のインターセプターも使用できます。
上記のソリューションは魅力的なものでした。行番号2のヘッダーに追加コールバックを割り当てることを忘れないでください!
1 private addExtraHeaders(headers: HttpHeaders): HttpHeaders {<br> 2 headers = headers.append('myHeader', 'abcd');<br> 3 return headers;<br> 4 } <br>