在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的一些响应头和控件....
谢谢,
答案 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 })
]);