Cada vez que realizo una solicitud de recuperación desde mi interfaz utilizando el siguiente código js, recibo un estado de solicitud 400 Bad. El cuerpo de la respuesta tiene un objeto de error que dice: "Se requiere un cuerpo de solicitud que no esté vacío".
Cuando inspecciono la sección de solicitud en mi pestaña de red de devtools, dice "no hay carga útil para esta solicitud". Así que me parece que no está enviando la sección del cuerpo de mi Fetch.
Llega al método .then() después.
Este es el código mecanografiado:
fetch(`api/person/${person.id}`, { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(person) }) .then(() => this.router.navigate(["/"]))este es el back-end de C#:
[HttpPut("{id}")] public IActionResult Put(int id, Person person) { person.Id = id; try { var updatedPerson = _personRepository.Update(person); if (updatedPerson != null) { return Ok(updatedPerson); } return NotFound(); } catch (ArgumentNullException) { return BadRequest(); } }Tenga en cuenta que la solicitud ni siquiera llega a este controlador. No se alcanzarán puntos de quiebre si coloco alguno aquí.
Esta es una aplicación de una sola página que ejecuto desde Visual Studio 2019.
Sin embargo, funciona con el cartero, devolviendo el código de estado 200 Ok y un objeto, y alcanzando los puntos de interrupción del back-end. La URL de solicitud contiene la int id y el cuerpo que contiene un objeto Json.
Bueno, esta no es una pregunta que tenga una respuesta clara. Estos son los pasos que podría necesitar tomar para averiguarlo:
Asegúrese de que en su solicitud de búsqueda el argumento persona realmente existe, solo haga console.log (persona) antes de buscar
Asegúrese de que el servidor acepte contenido de tipo 'aplicación/json'. Aunque en este caso el código de respuesta debería haber sido diferente.
Verifique los encabezados de respuesta, y ¿los orígenes de back-end y front-end son los mismos? Lo que tienes que ver es lo siguiente:
Access-Control-Allow-Headers: * Access-Control-Allow-Methods: PUT Access-Control-Allow-Origin: *Postman funciona como una aplicación nativa en su PC y tiene una forma diferente de enviar solicitudes en lugar de su navegador, a veces esto provoca resultados poco claros.
Aquí hay una manera de probar lo que está sucediendo.
¿Lo que sucede? ¿Recupera los datos (impresos en la consola)? Esto probablemente lo llevará al siguiente paso que debe tomar.
fetch("api/person/1") .then(response => response.json()) .then(data => console.log(data));