39 votes

Comment créer une URL conviviale en ASP.NET MVC ?

Comment puis-je générer des URL conviviales dans le cadre d'ASP.NET MVC ? Par exemple, nous avons une URL qui ressemble à ceci :

http://site/catalogue/BrowseByStyleLevel/1

Le 1 est Id du niveau d'étude (supérieur dans ce cas) à parcourir, mais j'aimerais reformater l'URL de la même manière que StackOverflow le fait.

Par exemple, ces deux URL vous mèneront au même endroit :

http://stackoverflow.com/questions/119323/nested-for-loops-in-different-languages

http://stackoverflow.com/questions/119323/

EDIT : La partie amicale de l'url est désignée sous le nom d'un limace .

51voto

Craig Stuntz Points 95965

Il y a deux étapes pour résoudre ce problème. Tout d'abord, créez une nouvelle route ou modifiez la route par défaut pour accepter un paramètre supplémentaire :

routes.MapRoute(  "Default", // Route name
                   "{controller}/{action}/{id}/{ignoreThisBit}", 
                   new { controller = "Home", 
                         action = "Index", 
                         id = "",
                         ignoreThisBit = ""}  // Parameter defaults )

Maintenant, vous pouvez taper ce que vous voulez à la fin de votre URI et l'application l'ignorera.

Lorsque vous rendez les liens, vous devez ajouter le texte "amical" :

<%= Html.ActionLink("Link text", "ActionName", "ControllerName",
                    new { id = 1234, ignoreThisBit="friendly-text-here" });

3voto

Hamid Points 921

Voici comment j'ai implémenté l'URL slug dans mon application. Note : Le Maproute par défaut ne doit pas être modifié et les routes sont traitées dans l'ordre dans lequel elles sont ajoutées à la liste des routes.

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home",
          action = "Index",
          id = UrlParameter.Optional
    } // Parameter defaults
);
routes.MapRoute("Place", "{controller}/{action}/{id}/{slug}", new { controller = "Place", action = "Details", id = UrlParameter.Optional,slug="" });

1voto

Moran Points 2260

Vous avez une route sur le global.asax

  routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Home", action = "Index", id = ""} 
                    // Parameter defaults )

vous pouvez définir votre propre itinéraire comme :

controller est la classe cs dans le dossier controllers.

vous pouvez définir votre identité - avec le nom de votre choix.

le système transmettra la valeur à votre méthode actionResult.

Pour en savoir plus sur cette étape, cliquez ici : http://www.asp.net/learn/mvc/tutorial-05-cs.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X