如何检查虚拟路径是否存在

时间:2012-08-28 17:21:42

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

如何以编程方式检查MVC路由是否存在?

说我有这段代码:

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

我想检查virtualPath.Route上生成的路由是否有匹配的控制器和操作。

我尝试使用GetRouteData,但即使对于有效路由也会返回null。

1 个答案:

答案 0 :(得分:4)

您可以从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);
    }
相关问题