2012-08-28 3 views
2

MVC 경로가 있는지 프로그래밍 방식으로 확인할 수 있습니까? 가상 경로가 있는지 확인하는 방법

나는이 코드 조각을 말해봐 :

var virtualPath = base.GetVirtualPath(requestContext, routeValues); 

내가 virtualPath.Route에서 생성 된 경로에 대한 일치하는 컨트롤러와 액션이 있는지 확인하고 싶습니다.

GetRouteData를 시도했지만 올바른 경로에 대해서도 null을 반환합니다.

+0

왜 그게 정확히 필요한거야? –

+0

@DarinDimitrov 일부 확장 프로그램을 사용하여 경로를 dinamically 번역하고 있으며 실제 경로를 사용할시기 또는 "번역 된 별칭"을 사용할시기를 결정하려는 경우 –

+0

실무 방식으로 내 대답을 업데이트합니다. –

답변

4

그런 다음 컨트롤러가 존재하고 이에 대한 조치가 routevalues ​​있는지 확인하는 반사를 사용 virtualPath에서 RouteValueDictionary를 얻을 수 있습니다

업데이트 : 샘플 방법 (나는 그것을 시도 그것은 작동합니다.) :

public static bool CheckRoute(RequestContext requestContext) 
    { 
     var routeData = RouteTable.Routes.GetRouteData(requestContext.HttpContext); 
     if (routeData == null) 
      return false; 
     var controllerName = (string)routeData.Values["controller"]; 
     var actionName = (string) routeData.Values["action"]; 
     var controller = ControllerBuilder.Current.GetControllerFactory().CreateController(requestContext, controllerName); 
     if (controller == null) 
      return false; 
     var controllerType = controller.GetType(); 
     var controllerDescriptor = new ReflectedControllerDescriptor(controllerType); 
     var actionDescriptors = controllerDescriptor.GetCanonicalActions(); 
     return actionDescriptors.Select(a => a.ActionName).Contains(actionName); 
    } 
관련 문제