1

我已经将大量路由映射到我的 MVC4 项目,如下所示:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // API routing
        routes.MapHttpRoute(
            name: "SomeApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        // Default controller mapping for non-web api views (testing)
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        //etc.
    }

这按计划工作,并且我的路线已正确注册。但是,稍后在我的视图中,我只想显示某些路线的 api,并允许用户选择显示 api 的路线。为此,我需要能够遍历我添加的路由并使用它们的字符串值来过滤出我想要使用的路由(下面的示例显示了我如何设置一个列表以仅显示使用该api/{controller}/{id}路由的 api 方法) .

var list = group.Where(g => (g.Route.RouteTemplate == "api/{controller}/{id}"));

我不确定该怎么做。我偶然发现了这个花絮,但是里面的数据RouteTable.Routes不能通过Route类型迭代,而只能通过RouteBase类型(即使Route扩展了这个类),它没有我可以看到检索路由字符串的方法,RouteTemplate

所以,看起来我的主要难题是如何遍历RouteTable.Routes和存储我映射的 HttpRoutes。任何帮助/想法将不胜感激!

4

1 回答 1

2

如果您只想通过 Web API 路由集合进行迭代,您可以执行类似GlobalConfiguration.Configuration.Routes获取HttpRouteCollection. 该集合将包含您所有的 api 路由。

于 2013-06-19T18:38:37.117 回答