如何以编程方式检查MVC路由是否存在?
说我有这段代码:
var virtualPath = base.GetVirtualPath(requestContext, routeValues);
我想检查virtualPath.Route上生成的路由是否有匹配的控制器和操作。
我尝试使用GetRouteData,但即使对于有效路由也会返回null。
答案 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);
}