В шаблоне для Web API 2 метод публикации всегда выглядит следующим образом:
[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
...
return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}
Я не понимаю этого CreatedAtRoute()
метода. Может ли кто-нибудь объяснить CreatedAtRoute()
мне метод?
c#
asp.net
asp.net-web-api
asp.net-web-api-routing
воинственный
источник
источник
Ответы:
CreatedAtRoute
Метод предназначен для возвращения URI для вновь созданного ресурса при вызове метода POST для хранения какой - то новый объект. Поэтому, если вы, например, ПУБЛИВАЕТЕ элемент заказа, вы можете вернуть такой маршрут, как «api / order / 11» (11, очевидно, является идентификатором заказа).Кстати, я согласен, что статья MSDN бесполезна для понимания этого. Маршрут, по которому вы действительно вернетесь, будет, естественно, зависеть от вашей настройки маршрута.
источник
[Route("[controller]")]
контроллера, что я возвращаю (например, чтобы можно было вызвать смежное действие GET с URL-адресом)?Когда вы используете CreatedAtRoute, первым аргументом является имя метода Get to the resource. Уловка, которая не так очевидна, заключается в том, что даже при указании правильного имени метода вы должны использовать параметр Name в атрибуте HttpGet, чтобы он работал.
Итак, если ответ в вашем сообщении такой:
Тогда ваш атрибут метода Get должен выглядеть так, даже если ваш метод назван Get:
Вызов вашего метода Post не только вернет новый объект (обычно как JSON), но и установит заголовок Location в ответе на URI, который получит этот ресурс.
источник
В WebAPI ядра .net этот метод используется для возврата кода 201, что означает, что объект был создан.
Как видно выше, CreatedAtRoute может получать 3 параметра:
routeName - это имя, которое вы должны присвоить методу, который будет URI, который получит этот ресурс после создания.
routeValues Это объект, содержащий значения, которые будут переданы методу GET на указанном маршруте. Он будет использоваться для возврата созданного объекта
содержание Это объект, который был создан.
В приведенном выше примере показана реализация двух методов простого контроллера с простым методом GET со связанным именем и методом POST, который создает новый объект.
ВАЖНЫЙ
Обратите внимание, что первый параметр в CreatedAtRoute (routeName) должен совпадать с определением Name в методе Get.
Объект во втором параметре должен иметь необходимые поля, которые вы используете для извлечения ресурса в методе Get, вы можете сказать, что это подмножество объекта, созданного самим
Последний параметр - объект компании, полученный в теле запроса в его полной форме.
Финлей
В конечном итоге, когда сообщение о создании новой компании будет добавлено в этот API, вы вернете маршрут типа «api / company / {id}», который вернет вам вновь созданный ресурс.
источник