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によってのみ反復できます。これには、ルーティング文字列を取得する方法がありません。RouteBaseRouteRouteTemplate

したがって、私の主な難問はRouteTable.Routes、マップした HttpRoutes を反復処理して保存する方法を考え出すことのようです。どんな助け/アイデアも大歓迎です!

4

1 に答える 1

2

Web API ルート コレクションのみを反復処理する場合は、GlobalConfiguration.Configuration.Routesgetのようなことを行うことができますHttpRouteCollection。このコレクションには、すべての API ルートが含まれます。

于 2013-06-19T18:38:37.117 に答える