Notre société développe une API pour nos produits et envisage d’utiliser ASP.NET MVC. Lors de la conception de notre API, nous avons décidé d'utiliser des appels comme celui ci-dessous pour permettre à l'utilisateur de demander des informations à l'API au format XML:
Comme vous pouvez le constater, plusieurs paramètres sont passés (c.-à-d. artist
et api_key
). Dans ASP.NET MVC, artist
serait la controller
, getImages
l'action, mais comment pourrais-je transmettre plusieurs paramètres à l'action?
Est-ce même possible en utilisant le format ci-dessus?
Les paramètres sont directement pris en charge dans MVC en ajoutant simplement des paramètres à vos méthodes d'action. Étant donné une action comme celle-ci:
public ActionResult GetImages(string artistName, string apiKey)
MVC remplira automatiquement les paramètres si une URL telle que:
/Artist/GetImages/?artistName=cher&apiKey=XXX
Un autre cas particulier concerne les paramètres nommés "id". N'importe quel paramètre nommé ID peut être placé dans le chemin plutôt que dans la chaîne de requête, donc quelque chose comme:
public ActionResult GetImages(string id, string apiKey)
serait rempli correctement avec une URL du type suivant:
/Artist/GetImages/cher?apiKey=XXX
De plus, si vous avez des scénarios plus complexes, vous pouvez personnaliser les règles de routage utilisées par MVC pour localiser une action. Votre fichier global.asax contient des règles de routage pouvant être personnalisées. Par défaut, la règle ressemble à ceci:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Si vous vouliez supporter une url comme
/Artist/GetImages/cher/api-key
vous pouvez ajouter un itinéraire comme:
routes.MapRoute(
"ArtistImages", // Route name
"{controller}/{action}/{artistName}/{apikey}", // URL with parameters
new { controller = "Home", action = "Index", artistName = "", apikey = "" } // Parameter defaults
);
et une méthode comme le premier exemple ci-dessus.
À partir de MVC 5, vous pouvez également utiliser le routage d'attributs pour déplacer la configuration des paramètres d'URL vers vos contrôleurs.
Une discussion détaillée est disponible ici: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx =
Sommaire:
D'abord, vous activez le routage d'attribut
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}
Ensuite, vous pouvez utiliser des attributs pour définir des paramètres et éventuellement des types de données.
public class BooksController : Controller
{
// eg: /books
// eg: /books/1430210079
[Route("books/{isbn?}")]
public ActionResult View(string isbn)
Vous pouvez transmettre des paramètres arbitraires via la chaîne de requête, mais vous pouvez également configurer des itinéraires personnalisés pour le gérer de manière RESTful:
http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&
api_key=b25b959554ed76058ac220b7b2e0a026
Cela pourrait être:
routes.MapRoute(
"ArtistsImages",
"{ws}/artists/{artist}/{action}/{*apikey}",
new { ws = "2.0", controller="artists" artist = "", action="", apikey="" }
);
Donc, si quelqu'un a utilisé l'itinéraire suivant:
ws.audioscrobbler.com/2.0/artists/cher/images/b25b959554ed76058ac220b7b2e0a026/
Cela les amènerait au même endroit que votre exemple de chaîne de requête.
Ce qui précède n’est qu’un exemple. Il n’applique pas les règles et contraintes commerciales que vous auriez à configurer pour vous assurer que les personnes ne "piratent" pas l’URL.