我刚刚介绍了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 } });
我在这里做错了什么?
答案 0 :(得分:1)
我想我会回答我自己的问题。问题出在我的路线限制上。一旦我删除了new RouteValueDictionary { { "Name", @"[-_\w]+" } }
行,一切都开始工作了。