Маршрутизация атрибутов и 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 запрашивает имя маршрута и не может его найти. Итак, как это обрабатывается с маршрутизацией атрибутов?


person Mike_G    schedule 23.01.2015    source источник


Ответы (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);
person Mike_G    schedule 23.01.2015