2016-01-23 79 views

回答

13

我看到兩種方法可以做到這一點:

  • 選項#1:使用BaseRequestOptions

您可以擴展此類並設置標題以用於每個請求:

@Injectable() 
export class DefaultRequestOptions extends BaseRequestOptions{ 
    headers:Headers = new Headers({ 
     'Content-Type': 'application/x-www-form-urlencoded' 
    }); 
} 

而且,如下所述其註冊:

bootstrap(AppComponent,[ 
    HTTP_PROVIDERS, 
    provide(RequestOptions, { useClass: DefaultRequestOptions }) 
}); 
  • 選項#2:延長Http類本身

您還可以擴展Http類和設置您需要的標題,如下所述:

@Injectable() 
export class CustomHttp extends Http { 
    constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { 
    super(backend, defaultOptions); 
    } 

    request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> { 
    return super.request(url, options);   
    } 

    get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    // Add headers into options 
    (...) 
    return super.get(url, options); 
    } 

    (...) 
} 

並將其註冊爲如下所述:

bootstrap(AppComponent, [ 
    HTTP_PROVIDERS, 
    provide(Http, { 
    useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions), 
    deps: [XHRBackend, RequestOptions] 
    }) 
]); 

希望它可以幫助你, 蒂埃裏

+0

有沒有我們可以修改返回在服務中觀察到的一種方式。就像改變請求開始或結束時發生的情況一樣?我們將如何做到這一點? – xmaestro

+0

總之,我們可以修改返回的observable嗎? – xmaestro

+1

使用選項2,以下是通過擴展Http類添加默認http標頭(並捕獲http錯誤)的全面指南 - http://www.adonespitogo.com/articles/angular-2-extending-http-provider/ –