Gérer correctement les ressources imbriquées dans le routage ASP.net MVC 4 WebApi
J'aimerais fournir des API REST de cette façon:
GET /api/devices
POST /api/devices
PUT /api/devices/1
DELETE /api/devices/1
C'est ma configuration:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Et ce sont les actions:
public IEnumerable<Device> Get()
{
//return all devices
}
public Devices Get(id)
{
//return a specific devices
}
et ainsi de suite.
Le problème apparaît lorsque je veux gérer imbriquée ressources:
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
C'est mon configration pour ces:
config.Routes.MapHttpRoute(
name: "NestedApi",
routeTemplate: "api/{controller}/{parentResourceId}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
La question s'affiche lorsque vous essayez d'OBTENIR et de POSTER à la imbriquée ressource:
[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
}
C'est, bien sûr, à défaut parce qu'il y a deux actions avec la même signature.
Je tiens à les entendre d'une façon d'accomplir ceci avec la plus Reposante approche
source d'informationauteur martincho
Vous devez vous connecter pour publier un commentaire.
Microsoft est l'ajout d'Attribut de Routage afin d'accroître la souplesse du système de routage.
Jetez un oeil à leur documentation sur le Scénario 3
Il y a aussi quelques réponses sur un Débordement de Pile comme:
Comment gérer hiérarchique des routes dans ASP.NET l'API Web?
Il y a des solutions basées sur la définition de la route mappages mais si vous voulez plus de plus de solution générique, cette est de loin la meilleure solution que j'ai vu sur ce sujet. Bien sûr, Web API 2 a l'attribut de routage.