首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义路由上未调用GetVirtualPath

自定义路由上未调用GetVirtualPath
EN

Stack Overflow用户
提问于 2012-12-06 17:55:23
回答 1查看 1K关注 0票数 2

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

代码语言:javascript
复制
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的扩展方法将此路径添加到我的路径集合中

代码语言:javascript
复制
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集合上调用此扩展:

代码语言:javascript
复制
RouteTable.Routes.Clear();
RouteTable.Routes.MapCustomRoute("somecontroller/someaction/{id}", new { controller = "Home", action = "Index" });

路由工作正常,我的请求被正确地映射到相应的控制器和操作--但是URL仍然是大写的。浏览我的代码,我可以看到我的CustomRoute的构造函数在初始化路由时被调用--但是当我发出请求时,GetVirtualPath方法从来没有被调用过。我是不是遗漏了什么明显的东西,我试着使用路由调试工具,一切看起来都很好,所以我在这里感到困惑!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-19 23:56:26

浏览我的问题列表,关闭打开的问题列表,我找到了这个问题。这是一个奇怪的问题;为了解决这个问题,我必须从头开始重新创建我的Visual Studio解决方案。然后,通过使用我上面的代码,新项目可以正常工作-但旧项目不能。我假设这是VS2010的怪癖,我并行运行了两个解决方案,确认它们有完全相同的代码库,一个可以工作,另一个不能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13741018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档