Атрибутивная Маршрутизация и CreatedAtRoute
Я пытаюсь преобразовать свой проект Web Api для использования атрибутивной маршрутизации. Одна вещь, которую я не понимаю, - это метод CreatedAtRoute для запроса POST. В моем WebApiConfig.cs у меня раньше был
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/account/{accountId}/site/{siteId}/visitor/{visitorId}/session/{sessionId}/{controller}/{action}",
defaults: new { action = RouteParameter.Optional }
);
Я прокомментировал это, думая, что это больше не нужно, но CreatedAtRoute хочет имя маршрута и не может его найти. Итак, как это обрабатывается с помощью атрибутивной маршрутизации?
1 ответ:
Хорошо...это было легко, как только вы видите, что происходит. В атрибутивной маршрутизации необходимо указать имя маршрута для получения ресурса. Так что на моем GET action это выглядит так:
[Route("{sessionId}",Name="GetSession")] [ResponseType(typeof(Session))] public async Task<IHttpActionResult> Get(HttpRequestMessage request, int accountId, int siteId, Guid visitorId, Guid sessionId)
А затем в пост-действии измените CreatedAtRoute на:
return CreatedAtRoute("DefaultApi", new { controller: "session" visitorId = session.VisitorId, sessionId = session.SessionId }, session);
К этому:
return CreatedAtRoute("GetSession", new { visitorId = session.VisitorId, sessionId = session.SessionId }, session);