ASP.NET WebForms GetVirtualPath始终返回null

时间:2011-03-09 04:13:43

标签: asp.net-4.0 asp.net-routing

我刚刚介绍了ASP.NET路由,目前已注册了两条路由:

        routes.MapPageRoute(
            "default",
            "{Path}/{Name}.aspx{Query}",
            "~/Default.aspx",
            true,
            new RouteValueDictionary { { "Name", "default" } },
            new RouteValueDictionary { { "Name", @"[-_\w]+" } });

        routes.MapPageRoute(
            "home",
            "{Name}.aspx{Query}",
            "~/Default.aspx",
            true,
            new RouteValueDictionary { { "Name", "default" } },
            new RouteValueDictionary { { "Name", @"[-_\w]+" } });

但是,当我尝试使用这些路由构建URL时,我总是得到一个例外。我试过这个:

private string GetVirtualPath(RouteValueDictionary values)
{
    return RouteTable.Routes.GetVirtualPath(
    null, values).VirtualPath;
}

还有这个:

private string GetVirtualPath(RouteValueDictionary values)
{
    var wrapper = new HttpContextWrapper(HttpContext.Current);
    return RouteTable.Routes.GetVirtualPath(
        new RequestContext(wrapper,
          RouteTable.Routes.GetRouteData(wrapper)), 
              values).VirtualPath;
}

无论哪种方式,当我调用时,RouteTable.Routes.GetVirtualPath都会得到一个空引用异常:

GetVirtualPath(new RouteValueDictionary { { "Name", entity.Name } });

甚至:

GetVirtualPath(new RouteValueDictionary { { "Name", entity.Name }, { "Query", string.Empty } });

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

我想我会回答我自己的问题。问题出在我的路线限制上。一旦我删除了new RouteValueDictionary { { "Name", @"[-_\w]+" } }行,一切都开始工作了。