155 votes

Comment puis-je avoir des itinéraires en minuscules dans ASP.NET MVC ?

Comment peux j’ai minuscules, plus souligner si possible, les itinéraires dans ASP.NET MVC ? Alors que j’aurais appeler et, si possible, appelle ?

Tout cela tout en utilisant des modèles tels que `` .

255voto

ITmeze Points 511

Avec 4,5 System.Web.Routing vous pouvez mettre en œuvre ce simple en définissant la propriété LowercaseUrls de RouteCollection :

Aussi, en supposant que vous faites cela pour des raisons de référencement vous souhaitez rediriger les URL entrantes en minuscules (comme dit dans la plupart des liens sur cet article).

44voto

Derek Lawless Points 1524

Ces deux tutoriels aidé quand j’ai voulu faire la même chose et fonctionnent bien :

http://www.coderjournal.com/2008/03/force-MVC-route-URL-LowerCase/ http://goneale.com/2008/12/19/LowerCase-route-URLs-in-ASPNET-MVC/

EDIT : Pour les projets avec les zones, vous devez modifier la méthode GetVirtualPath() :

21voto

Matt Points 21

Si vous utilisez le UrlHelper pour générer le lien, vous pouvez simplement spécifier le nom de l’action et le contrôleur en minuscules :

Résultats au : /media/photos/delete/64 (même si mon contrôleur et l’action sont de casse pascal).

16voto

John Oxley Points 4318

J'ai trouvé ce à Nick Berardi du Codeur Journal, mais il n'a pas d'informations sur la façon de mettre en œuvre l' LowercaseRoute classe. Donc reposter ici avec des informations supplémentaires.

Tout d'abord étendre le Route classe LowercaseRoute

public class LowercaseRoute : Route
{
    public LowercaseRoute(string url, IRouteHandler routeHandler)
        : base(url, routeHandler) { }
    public LowercaseRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler)
        : base(url, defaults, routeHandler) { }
    public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler)
        : base(url, defaults, constraints, routeHandler) { }
    public LowercaseRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, RouteValueDictionary dataTokens, IRouteHandler routeHandler) : base(url, defaults, constraints, dataTokens, routeHandler) { }
    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        VirtualPathData path = base.GetVirtualPath(requestContext, values);

        if (path != null)
            path.VirtualPath = path.VirtualPath.ToLowerInvariant();

        return path;
    }
}

Modifiez ensuite l' RegisterRoutes méthode de Mondial.asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.Add(new LowercaseRoute("{controller}/{action}/{id}", 
        new RouteValueDictionary(new { controller = "Home", action = "Index", id = "" }), 
        new MvcRouteHandler()));

    //routes.MapRoute(
    //    "Default",                                              // Route name
    //    "{controller}/{action}/{id}",                           // URL with parameters
    //    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    //);
}

J'aimerais cependant savoir un moyen d'utiliser les routes.MapRoute...

11voto

Markus Wolters Points 91

Vous pouvez continuer à utiliser la syntaxe MapRoute en ajoutant cette classe en tant qu’extension à RouteCollection :

Maintenant, vous pouvez utiliser au démarrage de l’application « MapRouteLowerCase » au lieu de « MapRoute » :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X