Правильная обработка вложенных ресурсов в ASP.NET MVC 4 Маршрутизация WebApi

Я хотел бы предоставить REST API таким образом:

GET /api/devices
POST /api/devices
PUT /api/devices/1
DELETE /api/devices/1

Это моя конфигурация:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

И это действия:

public IEnumerable<Device> Get()
{
//return all devices
}

public Devices Get(id)
{
//return a specific devices
}

и т.д.

Проблема возникает, когда я хочу обрабатывать вложенные ресурсы:

GET /api/devices/1/readings
POST /api/devices/1/readings
GET /api/devices/1/readings/1
PUT /api/devices/1/readings/1
DELETE /api/devices/1/readings/1

Это моя конфигурация для них:

config.Routes.MapHttpRoute(
    name: "NestedApi",
    routeTemplate: "api/{controller}/{parentResourceId}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

Проблема возникает при попытке GET и POST для вложенного ресурса:

[HttpGet]
public String Readings(int parentResourceId)
{
   //return a list of readings for the device
}

[HttpPost]
public String Readings(int parentResourceId)
{
    //create and return the id of a reading for the device
}

Это, конечно, не работает, потому что есть два действия с одной и той же сигнатурой.

Я хотел бы услышать, как это можно сделать с помощью подхода RESTful

Ответ 2

Существуют решения, основанные на определении сопоставлений маршрутов, но если вы хотите получить более общее решение, это, безусловно, лучшее решение, которое я видел связанные с этой темой. Конечно, Web API 2 имеет маршрутизацию атрибутов.