2

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

假设我有这段代码:

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

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

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

4

1 回答 1

4

您可以从中获取 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);
    }
于 2012-08-28T18:51:00.300 回答