Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

making URL lowercase. Any easy or builtin way?

Is there any easy/builtin way to make URL in lowercase for MVC3.

I have code that could do it but looking something simple to implement.

 routes.MapRouteLowercase(                 "Default", // Route name                 "{controller}/{action}/{id}", // URL with parameters                 new { controller = "Home", action = "index", id = UrlParameter.Optional } // Parameter defaults             );  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;         }     }     public static class RouteCollectionExtensions     {         public static Route MapRouteLowercase(this RouteCollection routes, string name, string url)         {             return routes.MapRouteLowercase(name, url, null /* defaults */, (object)null /* constraints */);         }          public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults)         {             return routes.MapRouteLowercase(name, url, defaults, (object)null /* constraints */);         }          public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, object constraints)         {             return routes.MapRouteLowercase(name, url, defaults, constraints, null /* namespaces */);         }          public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, string[] namespaces)         {             return routes.MapRouteLowercase(name, url, null /* defaults */, null /* constraints */, namespaces);         }          public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, string[] namespaces)         {             return routes.MapRouteLowercase(name, url, defaults, null /* constraints */, namespaces);         }          public static Route MapRouteLowercase(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces)         {             if (routes == null)             {                 throw new ArgumentNullException("routes");             }             if (url == null)             {                 throw new ArgumentNullException("url");             }              Route route = new LowercaseRoute(url, new MvcRouteHandler())             {                 Defaults = new RouteValueDictionary(defaults),                 Constraints = new RouteValueDictionary(constraints),                 DataTokens = new RouteValueDictionary()             };              if ((namespaces != null) && (namespaces.Length > 0))             {                 route.DataTokens["Namespaces"] = namespaces;             }              routes.Add(name, route);              return route;         }          public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url)         {             return context.MapRouteLowercase(name, url, (object)null /* defaults */);         }          public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults)         {             return context.MapRouteLowercase(name, url, defaults, (object)null /* constraints */);         }          public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults, object constraints)         {             return context.MapRouteLowercase(name, url, defaults, constraints, null /* namespaces */);         }          public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, string[] namespaces)         {             return context.MapRouteLowercase(name, url, (object)null /* defaults */, namespaces);         }          public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults, string[] namespaces)         {             return context.MapRouteLowercase(name, url, defaults, null /* constraints */, namespaces);         }          public static Route MapRouteLowercase(this AreaRegistrationContext context, string name, string url, object defaults, object constraints, string[] namespaces)         {             if (namespaces == null && context.Namespaces != null)             {                 namespaces = context.Namespaces.ToArray();             }              Route route = context.Routes.MapRouteLowercase(name, url, defaults, constraints, namespaces);             route.DataTokens["area"] = context.AreaName;              // disabling the namespace lookup fallback mechanism keeps this areas from accidentally picking up             // controllers belonging to other areas             bool useNamespaceFallback = (namespaces == null || namespaces.Length == 0);             route.DataTokens["UseNamespaceFallback"] = useNamespaceFallback;              return route;         }     } 
like image 957
Pirzada Avatar asked May 29 '11 14:05

Pirzada


People also ask

Should lowercase be URL?

Stick to one version: The lowercase pattern is recommended (because there will always be people who will link to this more traditional version). Use 301 redirects: If you see URLs with capital letters get into index (someone linked to it or you changed your content management system and it capitalized some URLs).

Can URL contain uppercase?

An Internet address is only case sensitive for everything after the domain name. For example, it does not matter if you use uppercase or lowercase with "computerhope.com," it still reaches the same page. However, when typing the name of the page, file, or directory in the URL, it is case sensitive.


1 Answers

I've just noticed that there is a new property in .NET Framework 4.5. Works great! RouteCollection.LowercaseUrls

Set LowercaseUrls to true

public static void RegisterRoutes(RouteCollection routes) {     routes.LowercaseUrls = true;     ... } 

Create a link

@Html.ActionLink("Log in", "Login", "Account") 

That will create awesome, lowercase url :)

<a href="/account/login">Log in</a> 
like image 170
krolik Avatar answered Oct 13 '22 15:10

krolik