0

在我的Angular 2應用程序中,我試圖使用Http@angular/http)向我的API發出請求。爲了使這些請求起作用,我需要將某些標頭添加到對API所做的每個請求中(包括JWT標頭)。在Angular 2中爲每個請求定製Http標頭

我想要做的是有一個API類,它創造了HTTP請求和一些錯誤處理和驗證等

事實證明的照顧,但是,我不能使用Http class從我的API類,因爲它會拿出以下錯誤; error

user.service.ts

import { Injectable } from '@angular/core'; 
import {User} from "../models/User"; 
import {API} from "../API"; 
import {Http} from "@angular/http"; 

@Injectable() 
export class UserService 
{ 
    constructor (private http : Http) {} 

    getProfile (user : User) 
    { 
     let api = new API (this.http); 

     return api.doRequest ('/user/' + user.id + '/profile'); 
    } 
} 

API.ts

import {Http, Headers, RequestOptions} from '@angular/http'; 

export class API 
{ 
    ... 

    constructor (private http : Http) {} 

    doRequest (url : string, method : string, data?) 
    { 
     let headers = {...}; 
     let options = new RequestOptions ({ headers: new Headers (headers), ... }); 

     return this.http.get (url, data, options) 
      .catch ((error) => { ... }); 
    } 
} 

東西更好地工作使用的Http直接從UserService的時候,但是。

有沒有辦法解決這個問題,或者更好的方法來達到預期效果?我應該只是延長Http

+0

有沒有你不能只使用HTTP API的類中的一個原因,而在所有未通過它在(,不知怎的,看起來靠不住的,我不t認爲傳遞一個注入服務的實例是個好主意......爲什麼不把它注入要使用它的類)?你不需要調用API.doRequest? –

回答

1

您應該使用追加()方法添加報頭,然後再通過它來請求對象,如下

doRequest (url : string, method : string, data?) 
    { 
     headers= new Headers(); 
     headers.append(name1,value1); 
     headers.append(name2,value2); 
     .... 
     let options = new RequestOptions ({ headers: headers, ... }); 

     return this.http.get (url, data, options) 
      .catch ((error) => { ... }); 
    } 
+0

我已經發布了最新的解決方案,在一個新的答案,.. – Lonely

+0

@Lonely所以我的代碼將無法正常工作? – Aravind

+0

我沒有在Angular4中測試它 – Lonely

0

就是這樣今天設置HTTP頭(角> 4):

導入:

import {HttpClient, HttpHeaders} from '@angular/common/http'; 

與用法:

const headers = new HttpHeaders() 
    .set("X-CustomHeader", "custom header value"); 

請注意,我們通過鏈接連續的set()方法來構建標頭對象。這是因爲HttpHeaders是不可變的,它的API方法不會導致對象變異。

而是,對set的調用將返回一個包含新值屬性的新HttpHeaders對象。因此,這意味着以下將不起作用

const headers = new HttpHeaders(); 
headers.set("X-CustomHeader", "custom header value")