Question

Nous avons un site Web qui traite des artistes et des lieux et que nous développons sous ASP.net MVC.

Nous avons nos vues d’artistes dans un dossier (Views / Artists / ..), un ArtistsController, ArtistsRepository et nous adhérons aux noms d’action REST tels que Show, New, Delete, etc.

Lorsque nous avons créé le site pour la première fois, tout a bien fonctionné dans notre environnement de test car nos URL de test étaient / artists / Show / 1209 mais nous devons changer cela pour que le site Web apparaisse sous la forme / artistes / Madonna et / artistes / Foo-Fighters etc.

Cependant, comment pouvons-nous distinguer les noms d’artistes valides des noms des actions pour ce contrôleur?! Par exemple, artistes / PostComment ou artistes / DeleteComment? Je dois autoriser le routage à gérer cela. Notre itinéraire par défaut est:

routes.MapRoute(
               "ArtistDefault",
               "artists/{artistName}",
               new { controller = "Artists", action = "Show", artistName = ""}

Pour que notre site Web fonctionne visiblement sur / artistes, notre contrôleur peut être renommé en singulier - ArtistController - par opposition à ArtistsController. Cela irait à l’encontre des conventions de nommage que nous avons suivies lorsque nous avons commencé (mais bon!).

Avez-vous d'autres recommandations? Si possible, nous pourrions également router en fonction des verbes (PostComment serait donc un POST afin de pouvoir peut-être nous orienter vers cette action), mais je ne suis pas sûr que cela soit conseillé, encore moins possible.

Merci

Était-ce utile?

La solution

Le 4ème paramètre de MapRoute vous permet de spécifier des restrictions pour les valeurs. Vous pouvez ajouter un itinéraire avant celui-ci à " artistes / {action} / {id} " avec une restriction sur les valeurs valides pour l'action; Si vous ne correspondez pas à l'une de vos actions, le prochain itinéraire correspondra au nom de l'artiste.

Autres conseils

Vous définiriez en fait plusieurs itinéraires ... les actions définies dans votre contrôleur iraient en premier, la valeur par défaut étant en bas. J'aime considérer les définitions d'itinéraire comme une "grande" déclaration de commutateur ole ". où la première règle satisfait gagne ..

routes.MapRoute(
               "ArtistPostComment",
               "artists/PostComment/{id}",
               new { controller = "Artists", action = "PostComment", id = "" }
);
routes.MapRoute(
               "ArtistDeleteComment",
               "artists/DeleteComment/{id}",
               new { controller = "Artists", action = "DeleteComment", id = "" }
);
routes.MapRoute(
               "ArtistDefault",
               "artists/{artistName}",
               new { controller = "Artists", action = "Show", artistName = "" }
);               
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top