C# 未在自定义路由上调用GetVirtualPath

C# 未在自定义路由上调用GetVirtualPath,c#,asp.net-mvc,asp.net-mvc-routing,C#,Asp.net Mvc,Asp.net Mvc Routing,我创建了一个名为CustomRoute的自定义路由,它使用以下结构在GetVirtualPath方法上执行各种操作(在本例中,我将整个URL设置为小写): public sealed class CustomRoute : Route { public CustomRoute(string url, IRouteHandler routeHandler) : base(url, routeHandler) { } public CustomRoute(string url, Ro

我创建了一个名为
CustomRoute
的自定义路由,它使用以下结构在
GetVirtualPath
方法上执行各种操作(在本例中,我将整个URL设置为小写):

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;
    }
}
我正在通过名为
MapCustomRoute
的扩展方法将此路由添加到路由集合中:

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;
}
最后在global.asax中的
RouteTable.Routes
集合上调用此扩展:

RouteTable.Routes.Clear();
RouteTable.Routes.MapCustomRoute("somecontroller/someaction/{id}", new { controller = "Home", action = "Index" });

路由工作正常,我的请求被正确地映射到相应的控制器和操作-但是URL仍然是大写的。通过我的代码,我可以看到在初始化路由时调用了我的
CustomRoute
的构造函数,但是在发出请求时从未调用过
GetVirtualPath
方法。我是否错过了一些明显的东西,我已经尝试使用路由调试工具,但一切看起来都很好,所以我在这里不知所措

仔细查看我的问题列表,关闭未解决的问题,我发现了这一个。这是一个奇怪的一个;为了解决这个问题,我必须从头开始重新创建VisualStudio解决方案。然后,通过使用我上面的代码,新项目工作正常,但旧项目没有。我假设这是VS 2010的一个奇怪的ism,我并行运行了两个解决方案,确认它们有完全相同的代码库,一个正常工作,另一个不正常。

真是太糟糕了。我甚至无法想象我们的89个项目能做到这一点。但是我的自定义路由的
GetVirtualPath()
方法也没有被调用:-| Yikes@Oliver听起来确实像一场噩梦!这还不算太糟糕,因为这是第一次,谢天谢地,也是最后一次。我不知道到底出了什么问题,这真是太让人恼火了,我的意思是这两件事之间一定有什么不同之处——不要无缘无故地停止工作。我想是在.sln或.csproj文件中,或是编译后的符号中。。。某物保罗,谢谢你回来了,即使这么久了!我终于找到了问题所在——使用JetBrains Rider(轻松地)调试ASP.NET源代码(他们根据需要反编译程序集!)。原来是路线登记的问题。我没有将该区域的名称设置为路由上的DataToken,因此它不会在生成当前URL的区域的筛选路由集合中。这真是一次冒险!谢谢你的同情心-它帮助我留在那里!好吧,这听起来确实有道理@Oliver,所以我将把它作为解决任何满足感的方法:)谢谢你的坚持和努力!这是我们每个人都希望做的最好的事。