我已经创建了一个名为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方法从来没有被调用过。我是不是遗漏了什么明显的东西,我试着使用路由调试工具,一切看起来都很好,所以我在这里感到困惑!
发布于 2013-02-19 23:56:26
浏览我的问题列表,关闭打开的问题列表,我找到了这个问题。这是一个奇怪的问题;为了解决这个问题,我必须从头开始重新创建我的Visual Studio解决方案。然后,通过使用我上面的代码,新项目可以正常工作-但旧项目不能。我假设这是VS2010的怪癖,我并行运行了两个解决方案,确认它们有完全相同的代码库,一个可以工作,另一个不能。
https://stackoverflow.com/questions/13741018
复制相似问题