gpt4 book ai didi

angular - 如何在 Angular 中有条件地添加 HttpClient 拦截器

转载 作者:太空狗 更新时间:2023-10-29 17:11:02 24 4
gpt4 key购买 nike

最近我一直在使用带有 Angular HttpClient 的拦截器。

我添加了与某些 HTTP GET 方法对应的 header ,而对于某些我不需要这些 header 。

我如何告诉我的拦截器有条件地只向那些方法添加拦截器?我什至可以拆分服务,例如一项服务用于 header ,一项服务不带 header ,或者一项服务用于不同的 header ,一项服务用于不同的 header 。

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);
}
});
}
}

最佳答案

但我知道为时已晚,我们仍然没有 Angular 的任何解决方案。目前一个简单的解决方法是创建一个 BehaviorSubject 并根据它的值激活拦截器。这样,您就可以处理必须使用您的拦截器的特定 HTTP 请求:

yourService.service.ts

public interceptorTwo = new BehaviorSubject<boolean>(null);

someHttpmethod() {
this.interceptorTwo.next(true);

// Add your CODE http
this.myHttp.post<any>('someUrl', data).finally(() => this.interceptorTwo.next(null));
}

你的InterceptorTwo.service.ts

const setAuth = this.yourService.interceptorTwo.value;
if (!setAuth) {
return next.handle(req);
}

关于angular - 如何在 Angular 中有条件地添加 HttpClient 拦截器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45781379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com