Esta es la respuesta más acertada que encomtrarás aportar, pero mírala pausadamente y analiza si es compatible a tu trabajo.
Solución:
Él CreatedAtRoute
El método está destinado a devolver un URI al recurso recién creado cuando invoca un método POST para almacenar algún objeto nuevo. Entonces, si publica un artículo de pedido, por ejemplo, puede devolver una ruta como ‘api/order/11’ (siendo 11 la identificación del pedido, obviamente).
Por cierto, estoy de acuerdo en que el artículo de MSDN no sirve para entender esto. La ruta a la que realmente regrese dependerá naturalmente de la configuración de su ruta.
Cuando usa CreatedAtRoute, el primer argumento es el nombre del método Get to the resource. El truco que no es tan obvio es que, incluso con el nombre de método correcto especificado, debe usar el parámetro Name en HttpGet attribute para que funcione.
Entonces, si el retorno en su publicación es este:
return CreatedAtRoute("Get", new newModel.Id, newModel);
Entonces tu método Get attribute debería verse así incluso si su método se llama Get:
[HttpGet("id", Name = "Get")]
Las llamadas a su método de publicación no solo devolverán el nuevo objeto (normalmente como JSON), sino que establecerán el encabezado de ubicación en la respuesta al URI que obtendría ese recurso.
En .net core WebAPI, utiliza este método para devolver un código 201, lo que significa que se creó el objeto.
[Microsoft.AspNetCore.Mvc.NonAction]
public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute (string routeName, object routeValues, object content);
Como puede ver arriba, el CreatedAtRoute puede recibir 3 parámetros:
rutaNombre
Es el nombre que le debes poner al método que será la URI que obtendrá ese recurso después de creado.
valores de ruta
Es el objeto que contiene los valores que se pasarán al método GET en la ruta nombrada. Se utilizará para devolver el objeto creado.
contenido
Es el objeto que se creó.
El ejemplo anterior muestra la implementación de dos métodos de un controlador simple con un método GET simple con el nombre enlazado y el método POST que crea un nuevo objeto.
namespace BastterAPI.Controllers
[Route("api/[controller]")]
[ApiController]
public class CompanyController : Controller
private ICompanyRepository _companyRepository;
public CompanyController(ICompanyRepository companyRepository)
_companyRepository = companyRepository;
[HttpGet("id", Name="GetCompany")]
public IActionResult GetById(int id)
Company company = _companyRepository.Find(id);
if (company == null)
return NotFound();
return new ObjectResult(company);
[HttpPost]
public IActionResult Create([FromBody] Company company)
if (company == null)
return BadRequest();
_companyRepository.Add(company);
return CreatedAtRoute("GetCompany", new Company CompanyID = company.CompanyID , company);
IMPORTANTE
-
Tenga en cuenta que el primer parámetro en CreatedAtRoute (routeName), debe ser el mismo en la definición del Nombre en el método Get.
-
El objeto en el segundo parámetro deberá tener los campos necesarios que usa para recuperar el recurso en el método Obtener, puede decir que es un subconjunto del objeto creado por sí mismo.
-
El último parámetro es el objeto social recibido en el cuerpo de la solicitud en su forma completa.
FINALMENTE
Como resultado final, cuando se realizó la publicación para crear una nueva empresa en esta API, devolverá una ruta como ‘api/company/id’ que le devolverá el recurso recién creado.
Puntuaciones y comentarios
Puedes añadir valor a nuestra información participando con tu veteranía en las críticas.