Атрибут Маршрутизация и 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);
Другие вопросы по тегам