我有一个用于HTTP get/post请求的拦截器。效果很好。
不幸的是,它不适用于我的jsonp请求/它们没有被捕获。
因此,我想创建另一个实现JsonpInterceptor的Interceptor。
实际上,它也不起作用。
到目前为止,我所做的是:
AppModule:
[{ provide: HTTP_INTERCEPTORS, useClass: MyJsonpInterceptor, multi: true }],
MyJsonpInterceptor:
@Injectable()
export class MyJsonpInterceptor implements JsonpInterceptor {
constructor(jsonp: JsonpClientBackend) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log("intercept");
}
}
有人知道,如何使用新的httpclient拦截 Angular 为4/5的jsonp请求吗?
最佳答案
我认为 Angular JsonpInterceptor
可能是关键点。这是我的解决方案:
NgModule
配置,删除HttpClientJsonpModule
。 JsonpClientBackend
和{provide: ɵb, useFactory: ɵc}
添加到提供程序。ɵb和ɵc是JsonpCallbackContext
和jsonpCallbackContext
的别名{provide: HTTP_INTERCEPTORS, useClass: JsonpInterceptor, multi: true},
作为最后的HTTP_INTERCEPTORS。或者,您可以使用自定义拦截器覆盖JsonpInterceptor。 希望这可以帮到你。
于2018.03.09更新:
您可以简单地做到这一点:
@NgModule({
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: XxxInterceptor, multi: true },
],
})
export class XxxModule {
}
@NgModule({
declarations: [
],
imports: [
XxxModule,
HttpClientJsonpModule,
],
providers: [
...
],
bootstrap: [AppComponent]
})
export class AppModule { }