Запрос POST HttpClient с использованием x-www-form-urlencoded

Я пытаюсь сделать запрос POST с заголовком заголовка 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')
      }
      );

К сожалению, мой API говорит, что я отправил пустое имя пользователя и пароль.

поэтому я решил сделать запрос почтальона моей конечной точке входа и посмотреть, откуда возникла эта проблема, и запрос почтальона возвратил имя пользователя и пароль.

Как получается, что когда я отправляю почту из почтового ящика, мой API возвращает мое имя пользователя и пароль, а когда я отправляю сообщение из моего приложения Angular, мой API возвращает пустые значения? Есть ли что-то, что мне не хватает?

Ответ 1

Вы отправляете данные 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')
    }
  );
}

Ответ 2

Вы можете сделать почтовый запрос, как показано ниже.

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

после этого вам нужно подписаться.