Атрибутивная Маршрутизация и 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 9

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);