2013-07-05 3 views
10

Я хотел бы предоставить REST API таким образом:правильно обрабатывать вложенные ресурсы в ASP.net MVC 4 WebAPI маршрутизации

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 

Это мой configration для них:

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 подхода

+0

Это похоже на дубликат http://stackoverflow.com/q/10783946/326110 и http://stackoverflow.com/questions/9594671/nested-resources-in-asp-net-mvc-4-webapi/16094056 # 16094056 –

ответ

2

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

Смежные вопросы