title: GetVirtualPath not being called on custom Route
body: <p>I have created a custom route called <code>CustomRoute</code> which performs various things on the <code>GetVirtualPath</code> method (for this example I'm setting the entire URL to lowercase) with the following structure:</p>
  
  <pre><code>public sealed class CustomRoute : Route
  {
      public CustomRoute(string url, IRouteHandler routeHandler) : base(url, routeHandler) { }
      public CustomRoute(string url, RouteValueDictionary defaults, IRouteHandler routeHandler) : base(url, defaults, routeHandler) { }
      public CustomRoute(string url, RouteValueDictionary defaults, RouteValueDictionary constraints, IRouteHandler routeHandler) : base(url, defaults, constraints, routeHandler) { }
      public CustomRoute(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;
      }
  }
  </code></pre>
  
  <p>I'm adding this route to my route collection through an extension method called <code>MapCustomRoute</code>:</p>
  
  <pre><code>public static CustomRoute MapCustomRoute(this RouteCollection routes, string url, object defaults)
  {
      CustomRoute route = new CustomRoute(url, new RouteValueDictionary(defaults), new MvcRouteHandler());
  
      routes.Add(route);
  
      return route;
  }
  </code></pre>
  
  <p>And then finally invoking this extension on the <code>RouteTable.Routes</code> collection in global.asax:</p>
  
  <pre><code>RouteTable.Routes.Clear();
  RouteTable.Routes.MapCustomRoute("somecontroller/someaction/{id}", new { controller = "Home", action = "Index" });
  </code></pre>
  
  <p>The routing works fine and my request is mapped correctly to the corresponding controller and action - however the URL is still in uppercase. Stepping through my code, I can see that my <code>CustomRoute</code>'s constructor is being called when initializing the route - but the <code>GetVirtualPath</code> method is never called when making my request. Am I missing something obvious here, I've tried to use the route debugging tool and everything looks good so I'm at a loss here!</p>