Атрибут Маршрутизация и 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 это выглядит так:
[Route("{sessionId}",Name="GetSession")]
[ResponseType(typeof(Session))]
public async Task<IHttpActionResult> Get(HttpRequestMessage request, int accountId, int siteId, Guid visitorId, Guid sessionId)
А затем в действии POST измените 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);