我有一个用于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是JsonpCallbackContextjsonpCallbackContext的别名
  • 然后添加{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 { }
    

    10-06 03:52