Как захватить ответ ActionResult Api в Angular?

#c# #angular

#c# #angular

Вопрос:

У меня есть следующий метод в моем пользовательском контроллере:

 [HttpPost]
public async Task<ActionResult<bool>> Create(User user)
{
    var userCreated = userService.register(user); // returns true or false

    if (userCreated)
    {
        return Ok();
    }
    else
    {
        return BadRequest("Could not create user.");
    }
}
  

Затем этот метод должен быть захвачен в моем angular, вызывающем службу:

 onSubmit(user: User): void {
    this.userService.registerUser(user).subscribe((response) => {
        console.warn(response);
    });
}
  

Метод регистрации URL-адреса:

 registerUser(user: User): Observable <boolean> {
    const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json' }) };
    return this.http.post<boolean>(environment.userUrl, user, httpOptions);
}
  

К сожалению, консоль записывает null. Я что-то упускаю? Я хочу зафиксировать, является ли статус OK or BadRequest .

Ответ №1:

В вашем контроллере вам не хватает, чтобы вернуть значение вашего ответа:

 [HttpPost]
public async Task<ActionResult<bool>> Create(User user)
{
    var userCreated = userService.register(user); // returns true or false

    if (userCreated)
    {
        return Ok(userCreated); // <= HERE
    }
    else
    {
        return BadRequest("Could not create user.");
    }
}
  

После изменения вышесказанного все должно быть в порядке.

Небольшой совет заключается в том, что вам не нужно добавлять HttpOptions при каждом запросе в Angular. Это HttpClient делает это за вас:

 registerUser(user: User): Observable<boolean> {
   return this.http.post<boolean>(environment.userUrl, user);
}
  

PS: Ok() в C # означает, что вы возвращаете ответ с кодом 200.
С другой стороны, a BadRequest() выдаст код ошибки 400 и будет перехвачен как ошибка внутри подписки. В вашем случае я считаю, что код в серверной части должен быть таким:

 [HttpPost]
public async Task<ActionResult<bool>> Create(User user)
{
    var userCreated = userService.register(user); // returns true or false
    return Ok(userCreated);
}
  

Комментарии:

1. Вероятно, он хочет вернуть созданного пользователя обратно клиенту, а не флаг. Также BadRequest() приводит к 400 нет 500 .

2. Спасибо BadResult , вы правы. Все, что он хочет вернуть, должно быть внутри OK() 🙂

3. @StPaulis Большое вам спасибо. Это помогает.