2017-07-07 66 views
1

我在Angular 4中編寫了一個調用REST API(DJANGO)的應用程序。 的代碼如下:Angular 4 GET 403響應

export class ForecastUnitService { 

private path = 'forecastunit/'; 
private options; 
constructor (private http: Http, private c:CentralService) { 
this.options=this.c.createOptions(); 
} 

getForecastUnits(): Observable<ForecastUnit[]> { 
return this.http.get(this.c.createURL(this.path),this.options) 
    .map(this.extractData) 
    .catch(this.handleError); 
} 
... 
} 

我補充一點,包含授權頭的選擇,但我仍然得到 403禁止。然而,當我用cUrl或郵差嘗試打電話時,或者在招搖時,同樣的道理,我會得到結果。 所以第一因子評分,標題是不正確的,但是當我登錄的選項,我得到:

{"method":null,"headers":{"Authorization":["**Correct Token**"],"Content-Type":["application/json"]},"body":null,"url":null,"withCredentials":null,"responseType":null} 

所以這是沒有問題的,當我看着從Chrome中的迴應,我看到以下內容:

{"detail":"Authentication credentials were not provided."} 

所以再次沒有憑據,但我真的通過他們,出了什麼問題?

+0

什麼是您傳遞的令牌的格式? – Aniket

+0

基本64,我猜 – fangio

+0

想知道你傳遞的令牌的示例格式 – Aniket

回答

1

Angular的http模塊將所有標題名稱更改爲小寫。這可能是一個問題,因爲某些API服務不符合規範,並且它們的標頭檢查在區分大小寫時是區分大小寫的。

檢查您的API的配置。

我假設你的CentralService創建了有效的選項。

interface RequestOptionsArgs { 
    url: string|null 
    method: string|RequestMethod|null 
    search: string|URLSearchParams|{[key: string]: any | any[]}|null 
    params: string|URLSearchParams|{[key: string]: any | any[]}|null 
    headers: Headers|null 
    body: any 
    withCredentials: boolean|null 
    responseType: ResponseContentType|null 
} 

頁眉:

class Headers { 
    static fromResponseHeaderString(headersString: string): Headers 
    constructor(headers?: Headers|{[name: string]: any}|null) 
    append(name: string, value: string): void 
    delete(name: string): void 
    forEach(fn: (values: string[], name: string|undefined, headers: Map<string, string[]>) => void): void 
    get(name: string): string|null 
    has(name: string): boolean 
    keys(): string[] 
    set(name: string, value: string|string[]): void 
    values(): string[][] 
    toJSON(): {[name: string]: any} 
    getAll(name: string): string[]|null 
    entries() 
} 
+0

我的問題中的第二個代碼塊是我的RequestOptions,這些對我而言是正確的。 – fangio

+0

如果在您的服務中正確輸入了所有內容,TypeScript應該突出顯示可能的錯誤。以防萬一在Angular文檔中檢查[RequestOptionsArgs](https://angular.io/api/http/RequestOptionsArgs)。 –

+0

如何將標題檢查更改爲不區分大小寫?或者標題不要在Angular中小寫? – fangio

-1

你能告訴我們CentralService? 此外,你可能想避免在構造函數中調用它,而是實現OnInit