2017-10-12 17 views
11

Tôi đang cố gắng để thực hiện một yêu cầu POST với kiểu tiêu đề x-www-form-urlencoded nội dung như sau:HttpClient yêu cầu POST sử dụng x-www-form-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') 
     } 
    ); 

Thật không may API của tôi nói rằng tôi đã gửi tên truy cập và mật khẩu trống.

vì vậy tôi quyết định yêu cầu người đăng bài đến điểm cuối đăng nhập của tôi và xem vấn đề đến từ đâu và yêu cầu của người đưa thư đã trả lại tên người dùng và mật khẩu.

Làm thế nào đến khi tôi đăng bài từ bưu điện, API trả lại tên người dùng và mật khẩu của tôi và khi tôi đăng từ ứng dụng Angular, API của tôi trả về giá trị rỗng? Có điều gì tôi đang thiếu?

Trả lời

20

Bạn đang đăng dữ liệu JSON lên API thay vì dữ liệu biểu mẫu. Đoạn mã dưới đây sẽ hoạt động.

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

phải là 'application/x-www-form-urlencoded' – goat

+0

Sau khi tìm kiếm nhiều giải pháp này đã hoạt động! Rất nhiều hướng dẫn cũ hiện có bằng cách sử dụng HttpClient cũ ... :) Cảm ơn bạn! – Marius

+1

Hãy xem xét giải pháp này https://stackoverflow.com/a/39864307/4420532 – Felix

-3

Bạn có thể thực hiện yêu cầu đăng bài như dưới đây.

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); 
} 

sau đó bạn phải đăng ký.

Các vấn đề liên quan