CreateAtRoute
- это вспомогательный метод, который наследует от ControllerBase . CreateAtRoute()
делает , просто возвращая новый CreatedAtRouteResult (routeName, routeValues, значение) . Темной магии нет вообще:
/// <summary>
/// Creates a <see cref="CreatedAtRouteResult"/> object that produces a <see cref="StatusCodes.Status201Created"/> response.
/// </summary>
/// <param name="routeName">The name of the route to use for generating the URL.</param>
/// <param name="routeValues">The route data to use for generating the URL.</param>
/// <param name="value">The content value to format in the entity body.</param>
/// <returns>The created <see cref="CreatedAtRouteResult"/> for the response.</returns>
[NonAction]
public virtual CreatedAtRouteResult CreatedAtRoute(string routeName, object routeValues, object value)
=> new CreatedAtRouteResult(routeName, routeValues, value);
Метод CreateAtRoute
часто используется в ApiController, а третий параметр будет использоваться в качестве содержимого ответа. Допустим, метод действия:
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
[HttpGet("{id}", Name = "HelloDetails")]
public IActionResult GetDetail(int id)
{
var result = new MyItem() {
Id=id,
ItemName="sherry"
};
return new JsonResult(result);
}
[HttpPost]
public async Task<IActionResult> Create([FromBody] MyItem item)
{
if (item == null)
{
return BadRequest();
}
return CreatedAtRoute("HelloDetails", new { id = item.Id }, item);
}
Используйте Почтальон для проверки, результат - 201 ответ. Тело ответа содержит сведения о сущности, которую мы создали, а заголовок Location ответа содержит URI для сущности.
Вы также можете посмотреть эту ссылку