Si vous examinez l'URL d'une question SO, vous verrez qu'un ID et un "SLUG" sont transmis au contrôleur Questions : https://stackoverflow.com/questions/676934/what-do-you-need-to-write-your-own-blog-engine . Ce que je trouve intéressant, c'est qu'il est possible de modifier la partie "SLUG" de l'URL sans affecter la capacité de l'application à acheminer la demande. exemple . Le seul moyen que j'ai trouvé pour y parvenir est d'avoir un itinéraire qui accepte un identifiant et un "SLUG" et d'utiliser une contrainte d'itinéraire sur le "slug" pour s'assurer qu'il suit un modèle. J'ai dû utiliser une contrainte pour m'assurer que le fait d'avoir les deux variables n'avait pas pour effet de faire correspondre cette route à toutes les demandes. Est-ce que quelqu'un a une meilleure façon d'accomplir cela, ou des exemples de scénarios de routage plus avancés ?
ADDITION :
Je sais que le SLUG est destiné à la lisibilité humaine et j'aimerais reproduire cette fonction dans une autre application. Quelle est la meilleure façon d'y parvenir ?
Itinéraire :
routes.MapRoute(
"Id + Slug", // Route name
"Test/{id}/{slug}", // URL with parameters
new // Parameter defaults
{
controller = "Test",
action = "Details",
id = "",
slug = ""
},
new { slug = new SlugConstraint() }
);
Contrainte simple :
public class SlugConstraint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection)
{
string value = values[parameterName].ToString();
return value.Contains("-");
}
}