Je travaille avec ASP.NET MVC 2 et je souhaite optimiser mon routage. Le résultat souhaité est la suivante:Mappage d'itinéraires compatible avec le contenu dans ASP.NET MVC 2
http://www.url.com/Sites/
http://www.url.com/Sites/Search/NY001
http://www.url.com/Sites/NY001
http://www.url.com/Sites/NY001/Photos
Le problème avec ce scénario est que je veux traiter les bits d'URL différemment en fonction de leur contenu, dans un sens. Comme on peut l'imaginer, "NY001" est l'identifiant d'un site spécifique , pas pour une action qui se trouve dans le contrôleur Sites
. Ma solution actuelle consiste à définir une carte d'itinéraire spéciale pour les URL spécifiques au site et à spécifier chaque action séparément dans le contrôleur Sites
avant cela.
// currently in place, works
routes.MapRoute("SiteList", "Sites", new { controller = "Sites", action = "Index" });
routes.MapRoute("SiteSearch", "Sites/Search/{searchString}", new { controller = "Sites", action = "Index", searchString = "" });
routes.MapRoute("SiteNotFound", "Sites/NotFound", new { controller = "Sites", action = "NotFound" });
// and so on...
routes.MapRoute("Site", "Sites/{siteId}/{action}", new { controller = "Sites", action = "Index", siteId = "" });
Comme cela est l'un des éléments centraux de mon application Web, ces actions sont de plus en plus par jour et la liste devient un peu difficile à manier. J'aimerais pouvoir distiller la longue liste des itinéraires spécifiques d'action à une seule déclaration, semblable à ceci:
routes.MapRoute("Sites", "Sites/{action}/{id}", new { controller = "Sites", action = "Index", id = UrlParameter.Optional });
Le problème est que le cadre de routage n'a aucun moyen de faire la différence entre cette nouvelle route et la un site spécifique dans l'exemple ci-dessus; par conséquent, les deux sont des correspondances. Suis-je obligé de déclarer chaque action séparément? Devrais-je envisager d'utiliser une expression régulière pour me différencier en fonction du contenu des URL? Merci d'avance et je m'excuse d'avance si cette question a déjà été posée sous une forme différente.