如何以编程方式检查 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);
}