2017-10-12 46 views
11

我試圖與x-www-form-urlencoded內容類型頭中的POST請求如下POST請求:HttpClient的使用x-www-窗體-urlencoded

login(username, password): Observable<any> { 
    return this.http.post('/login', { 
     username: username, 
     password: password 
     }, 
     { 
     headers: new HttpHeaders() 
      .set('Content-Type', 'x-www-form-urlencoded') 
     } 
    ); 

不幸的是我的API說,我送空的用戶名和密碼。

因此,我決定向我的登錄端點發出郵遞員請求,並查看問題來自何處,並且郵遞員請求確實返回了用戶名和密碼。

當我從postman發佈我的API時,如何返回我的用戶名和密碼,當我從我的Angular應用程序發佈時,我的API返回空值?有什麼我失蹤?

回答

20

您將JSON數據發佈到API而不是表單數據。 下面的代碼段應該可以工作。

login(username, password): Observable<any> { 
    const body = new HttpParams() 
    .set('username', username) 
    .set('password', password); 

    return this.http.post('/login', 
    body.toString(), 
    { 
     headers: new HttpHeaders() 
     .set('Content-Type', 'application/x-www-form-urlencoded') 
    } 
); 
} 
+1

應該是'application/x-www-form-urlencoded' – goat

+0

經過大量的搜索這個解決方案的工作!很多舊的指南使用舊的HttpClient ... :)謝謝! – Marius

+1

考慮這個解決方案https://stackoverflow.com/a/39864307/4420532 – Felix

-3

您可以按照如下方式發佈帖子請求。

login(email:string, password:string):Observable<User>{ 
    let headers = new HttpHeaders(); 
    headers = headers.set('Content-Type', 'application/x-www-form-urlencoded') 
    let params = new HttpParams().set('user', JSON.stringify({email: email,password:password})); 
    return this.http.post<User>(`${MEAT_API_AUX}/login`, 
    {},{headers: headers,params:params}) 
     .do(user => this.user = user); 
} 

之後,你必須進行訂閱。

相關問題