Я хотел бы предоставить 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