Ответ 1
Короткий ответ
Вы используете неправильную перегрузку CreatedAtRoute
. Используйте перегрузку, которая принимает три аргумента.
Рабочий пример
Например, на моей машине работает следующее.
[Route("api/[controller]")]
public class SubscribersController : Controller
{
public IActionResult Index()
{
var subscriber = new
{
Id = Guid.NewGuid(),
FirstName = "Shaun",
LastName = "Luttin"
};
// overload with three arguments
return CreatedAtRoute(
routeName: "SubscriberLink",
routeValues: new { id = subscriber.Id },
value: subscriber);
}
[HttpGet("{id}", Name = "SubscriberLink")]
public IActionResult GetSubscriber(Guid id)
{
var subscriber = new
{
Id = id,
FirstName = "Shaun",
LastName = "Luttin"
};
return new JsonResult(subscriber);
}
}
Подробнее
Результат - ответ 201. Тело ответа содержит сведения об объекте, который мы создали (аргумент value
), а заголовок ответа ответа содержит URI для объекта.
Существует три перегрузки для CreatedAtRoute
.
CreatedAtRoute(object routeValues, object value)
CreatedAtRoute(string routeName, object value)
CreatedAtRoute(string routeName, object routeValues, object value)
Если мы хотим передать имя маршрута и значения маршрута, мы используем перегрузку, которая принимает три аргумента. Если мы не хотим возвращать детали созданного нами объекта, мы можем передать null
для третьего аргумента,