MVCルートが存在するかどうかをプログラムで確認するにはどうすればよいですか?
私がこのコードを持っているとしましょう:
var virtualPath = base.GetVirtualPath(requestContext, routeValues);
virtualPath.Routeに生成されたルートに一致するコントローラーとアクションがあるかどうかを確認したいと思います。
GetRouteDataを試してみましたが、有効なルートでもnullが返されます。
MVCルートが存在するかどうかをプログラムで確認するにはどうすればよいですか?
私がこのコードを持っているとしましょう:
var virtualPath = base.GetVirtualPath(requestContext, routeValues);
virtualPath.Routeに生成されたルートに一致するコントローラーとアクションがあるかどうかを確認したいと思います。
GetRouteDataを試してみましたが、有効なルートでもnullが返されます。
からRouteValueDictionaryを取得しvirtualPath
、リフレクションを使用して、このルート値のコントローラーとアクションが存在するかどうかを確認できます
更新: サンプルメソッド(試してみました。動作します):
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);
}