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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top