【发布时间】:2018-01-28 14:24:01
【问题描述】:
最近我一直在使用带有 Angular HttpClient 的拦截器。
我添加了与某些 HTTP GET 方法相对应的标头,对于一些我不需要这些标头。
如何告诉我的拦截器有条件地将拦截器添加到这些方法?我什至可以拆分服务,例如一项服务用于标头,一项服务没有标头,或者一项用于不同标头,另一项用于不同标头。
NgModule 提供者
{
provide: HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi: true,
},{
provide: HTTP_INTERCEPTORS,
useClass: AngularInterceptor,
multi: true,
}
我的拦截器
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authReq = req.clone({headers: req.headers.set('X-Auth-Token', "-------------------------")});
return next.handle(authReq);
}
}
@Injectable()
export class AngularInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).do(event => {}, err => {
if(err instanceof HttpErrorResponse){
console.log("Error Caught By Interceptor");
//Observable.throw(err);
}
});
}
}
【问题讨论】:
-
请求拦截器添加标头的逻辑应该在拦截器中。
-
@jonrsharpe 在我与 httpclient 一起实现 http 拦截器时在内部调用。
-
我不确定你的意思;我知道新的拦截器是如何工作的(我有written about them)。我的意思是 拦截器本身 应该包含指定需要将标头添加到哪些请求的逻辑,根据设计,每个请求都会调用
intercept方法。 -
@jonrsharpe 对不起,我当时听不懂你的说法。所以这就像添加一堆 if else 的 switch 来检查 req 并添加标题对吗?
-
是的,没错。这样,其他所有内容都可以发出请求,而不必担心是否添加或应该添加标头。
标签: angular angular-http angular-http-interceptors angular-httpclient