Comment définir un itinéraire polyvalent pour un site ASP.NET MVC?
-
03-07-2019 - |
Question
J'ai un site de nouvelles avec des articles marqués dans des catégories.
Mon contrôleur s'appelle "Catégorie". et cette URL:
http://monsite.com/Catégorie/Sport
transmet Sport
à l'action Index
du contrôleur Catégorie
.
Je souhaite autoriser les URL suivantes:
http://monsite.com/Sport/Hockey
http://monsite.com/Sport/Football
http://monsite.com/Science/Evolution
Qui transmet toutes les informations de catégorie à l'action Index
du contrôleur Catégorie
.
Comment créer un itinéraire fourre-tout qui gère tout cela et les transfère vers une catégorie?
La solution
La réponse à ma question est plutôt bonne ici .
Autres conseils
Vous pouvez le faire comme ceci:
routes.MapRoute("Default", "{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" }
);
puis dans votre contrôleur:
public class CategoryController : Controller
{
public ActionResult Display(string category, string subcategory)
{
// do something here.
}
}
Veillez à ce que les itinéraires ci-dessus ne soient pas utilisés pour TOUTES les routes (vous ne pouvez pas avoir de page À propos, etc. sauf si vous spécifiez des routes explicites avant la précédente).
Vous pouvez toutefois inclure une contrainte personnalisée pour limiter le routage aux catégories existantes. Quelque chose comme:
public class OnlyExistingCategoriesConstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
var category = route.DataTokens["category"];
//TODO: Look it up in your database etc
// fake that the category exists
return true;
}
}
Ce que vous utilisez dans votre itinéraire comme ceci:
routes.MapRoute("Default",
"{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" },
new { categoryExists = new OnlyExistingCategoriesConstraint() }
);
De cette manière, cela n'interférera pas avec vos autres itinéraires définis.