通过MapHttpRoute映射到RouteTable.Routes的路由迭代 - MVC4 Web API

时间:2013-06-19 17:58:31

标签: asp.net asp.net-mvc-4 asp.net-web-api asp.net-mvc-routing

我已将多个路由映射到我的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方法1}}路线)。

api/{controller}/{id}

我不确定如何解决这个问题。我偶然发现了this tidbit,但var list = group.Where(g => (g.Route.RouteTemplate == "api/{controller}/{id}")); 中的数据无法通过RouteTable.Routes类型进行迭代,而只能通过Route类型进行迭代(即使RouteBase扩展了这个类),它没有我可以看到的方法来检索路由字符串Route

所以,看起来我的主要难题是如何迭代RouteTemplate并存储我映射的HttpRoutes。任何帮助/想法将不胜感激!

1 个答案:

答案 0 :(得分:2)

如果您希望仅通过Web API路由集合进行迭代,则可以执行GlobalConfiguration.Configuration.Routes之类的操作来获取HttpRouteCollection。这个系列将包含你所有的api路线。