Angular 2并控制HTTP请求和响应

时间:2016-04-16 17:18:05

标签: angularjs angular

在Angular 2中,我试图控制http请求/响应,以便在发送请求和获取响应时设置/读取某些标头。

我只是像这样覆盖HttpRequest,它对我有用:

@Injectable()
export class HttpRequest extends RequestOptions {
    constructor() {
         super({
             method: RequestMethod.Get,
             headers: new Headers({
                'X-Some-Header': 'some-content'})
        });
    }
}

但是为了覆盖响应我有问题:

@Injectable()
export class HttpResponse extends Response {
    constructor(responseOptions: ResponseOptions) {
        super(responseOptions);
        console.log("RESPONSE IS CREATED!!!!!!!");
    }
}

永远不会调用构造函数,这里是bootstrap:

bootstrap(AppComponent,
    [   ROUTER_PROVIDERS
        ,HTTP_PROVIDERS
        ,provide(RequestOptions, {useClass: HttpRequest})
        ,provide(Response, {useClass: HttpResponse})
    ]);

覆盖响应的原因是在全局范围内读取404-Not Page Found的一些响应头和控件....

谢谢,

2 个答案:

答案 0 :(得分:1)

你不能覆盖Response我记得在一个相关的Http类中使用new Response创建它而不是从注入器请求它,这是合理的,因为{{1}需要成为每个请求的不同实例。

答案 1 :(得分:0)

您可以通过以下几种方式实现它:创建基本服务类或提供自定义xhr实现:

@Injectable()
export class CustomBrowserXhr extends BrowserXhr {
  constructor() {}
  build(): any {
    let xhr:XMLHttpRequest = super.build();
    /*...add headers, listeners etc...*/
    return <any>(xhr);
  }
}

bootstrap(AppComponent, [
  HTTP_PROVIDERS,
  provide(BrowserXhr, { useClass: CustomBrowserXhr })
]);