Ошибка в Angular с HttpParams 422 (Необработанная сущность) и FastAPI

#angular #rest #fastapi #http-status-code-422 #http-parameters

Вопрос:

У меня есть этот URL-адрес в бэкэнде, и мне нужно передать c1 как параметр, c1-это только пример, этот метод включает или отключает пользователя и возвращает «ок».

http://127.0.0.1:8000/admin/enable_disable_account?name=c1

значение берется из кнопки

 <div *ngFor='let userInfo of users'>
 <ul class="list-group">
    <li class="list-group-item">username -> {{userInfo["username"]}}</li>
    <li class="list-group-item">email -> {{userInfo["email"]}}</li>
    <li class="list-group-item">enable/disable -> {{userInfo["enable"]}}</li>
 </ul>
  <button class="btn btn-primary" (click)="setValor(userInfo['username'])">Enable/Disable</button>   
</div>
 

Метод компонента для управления этим событием щелчка

     setValor(username): void {
    console.log("click")
    this.adminServ.updateStateUser(username)
    .subscribe(data => {
      
      console.log(data)
    },
    err => {
      console.log("error")
      console.error(err)
    })
  }
 

И метод в сервисе

     public updateStateUser(username): Observable<any> {
    let params = new HttpParams()
      .append('name', username)      
    return this.http.post('http://127.0.0.1:8000/admin/enable_disable_account', params)
  }
 

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

Я копирую здесь метод бэкенда, я не знаю, важно ли найти проблему, это делается с помощью FastAPI

 @router.post("/enable_disable_account")
async def enable_disable_account(name: str, current_user: User =   Security(get_current_user, scopes=["admin"])):           
  result = await admin_db.enable_disable_account(name)
  if result:
    return JSONResponse(status_code=status.HTTP_200_OK,
                        content='ok')
 

Ответ №1:

 this.http.post('http://127.0.0.1:8000/admin/enable_disable_account', params)
 

эта строка неверна.

Angular post вторым параметром метода http-клиента является body , а третьим параметром является options .

когда вы хотите установить query и передать params , вам нужно передать в качестве третьего параметра. а также вы должны отправлять в качестве объекта не просто HttpParams . Ссылка на API углового Http-клиента

 this.http.post('http://127.0.0.1:8000/admin/enable_disable_account',null ,{
params: params
})