2011-03-09 3 views
0

난 그냥 ASP.NET 라우팅에 도입하기 오전이 개 루트는 순간에 등록 : 그러나ASP.NET 웹폼 GetVirtualPath는 항상 null을 반환

 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을 구축하려고, I 항상 예외가 발생합니다. 나는이 시도 :

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에 null 참조 예외를 얻을 : 심지어

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

또는 :

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

내가 여기서 잘못하고있는거야?

답변

1

나는 내 자신의 질문에 답할 것입니다. 문제는 내 경로 제한 때문이었습니다. new RouteValueDictionary { { "Name", @"[-_\w]+" } }으로 줄을 제거하면 모든 작업이 시작됩니다.