2017-04-23 91 views
0

我試圖執行和自角度2 Http GET請求時遇到了自定義標頭這個問題。從Postman preforming相同的請求工作正常,但是我得到以下405錯誤Angular2:Angular 2 Http自定義標題獲取405

OPTIONS http://[somehost.com]/api/v1/admin/account/singin 405 (Method Not Allowed) 

API有,你在標題中通過用戶名和密碼GET操作,並將其與令牌在它的頭部返回200。這裏是我使用的代碼塊的例子:

constructor (private http: Http) { 

} 

login (userName: string, password: string): Observable<any> { 

    const endPointUrl = this.baseUrl + '/admin/account/singin'; 

    const headers = new Headers({ 
    'Accept': 'application/json', 
    'X-Rem-Username': userName, 
    'X-Rem-Password': password 
    }); 

    const options = new RequestOptions({headers: headers}); 

    return this.http.get(endPointUrl, options) 
    .map((response: Response) => { 
     console.log(response); 
     return response; 
    }); 
} 

正如我提到的,郵差和他WebStorm REST客戶端,這些標題執行這一要求正常工作。如果我刪除這些'X-Rem'標題,我會得到一個401,這是預期的。任何幫助將不勝感激,謝謝。

+0

添加'X-雷姆Username'和'X-雷姆Password'您CORS響應頭['接入控制允許Headers'(https://開頭開發商.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)..假設您已經在您的服務器上設置了CORS。 –

+0

嗨,我會要求提供者這樣做。 – Joofville

+0

這樣做的技巧,謝謝 – Joofville

回答

0

這不是角應用問題。你的app和rest api服務器是不同的服務器/域。您應該在服務器中配置跨域允許。每當您通過網頁瀏覽器請求服務器上的任何API時,首先請通過請求OPTION方法檢查跨域允許選項。在郵遞員API直接發送,沒有跨域。

+0

謝謝你們,結果是CORS沒有正確設置在API端。 – Joofville

0

我不知道,但你可以嘗試添加此標題:

"Access-Control-Expose-Headers" : "Authorization" 

我發現它在這個discussion

1

試試這個

const headers = new Headers({ 
    'Accept': 'application/json', 
    'X-Rem-Username': userName, 
    'X-Rem-Password': password 
}); 

this.http.get('url', {headers: headers})