Une façon de le faire serait d'avoir un séparé itinéraire pour chaque page de destination. Une autre façon serait d'avoir une seule route avec une contrainte qui correspond à chaque page de destination (et rien d'autre).
routes.MapRoute(
"LandingPage1"
"landingpage1/{id}",
new { controller = "home", action = "landingpage", id = UrlParameter.Optional });
routes.MapRoute(
"LandingPage2"
"landingpage2/{id}",
new { controller = "home", action = "landingpage2", id = UrlParameter.Optional });
Notez que vous pourriez probablement le faire avec un peu de réflexion (non testé).
foreach (var method on typeof(HomeController).GetMethods())
{
if (method.ReturnType.IsInstanceOf(typeof(ActionResult)))
{
routes.MapRoute(
method.Name,
method.Name + "/{id}",
new { controller = "home", action = method.Name, id = UrlParameter.Optional });
}
}
La solution RouteConstraint serait similaire, sauf que vous auriez une seule route avec une contrainte personnalisée qui a évalué si la valeur d'itinéraire appropriée correspond à une des méthodes sur HomeController et, le cas échéant, remplacer le contrôleur et action avec "home" et la valeur correspondante.
routes.MapRoute(
"LandingPage",
"{action}/{id}",
new { controller = "home", action = "index", id = UrlParameter.Optional },
new LandingPageRouteConstraint()
);
public LandingPageRouteContstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
// simplistic, you'd also likely need to check that it has the correct return
// type, ...
return typeof(HomeController).GetMethod(values.Values["action"]) != null;
}
}
Notez que le mécanisme de routage par page, même si vous utilisez la réflexion, est effectué une seule fois. A partir de là, vous faites un simple coup d'œil à chaque fois. Le mécanisme RouteConstraint utilisera la réflexion à chaque fois pour voir si l'itinéraire correspond (à moins qu'il ne mette en cache les résultats, ce que je ne pense pas faire).
Parfait, cela aide des tonnes. Merci! –