0

次のように、ルートを使用して MVC アプリケーションをセットアップしようとしています。

  • mysite.com/ -> インデックス アクション
  • mysite.com/thingID -> CurrentThing アクションへ
  • mysite.com/thingID/year -> CurrentThing アクションへ

アクション:public ActionResult CurrentThing(string thingID, int year)

また、ID の有無にかかわらず機能する通常のコントローラー/アクション ルートも必要です。ThingID は文字列です。次のルートが定義されています。

        routes.MapRoute(
            "Regular",
            "{controller}/{action}/{id}",
            new { id = UrlParameter.Optional }
        );

        routes.MapRoute(
            "RootSpecificRecord",
            "{thingID}/{year}",
            new { controller = "Things", action = "CurrentThing", year = DateTime.Now.Year }
        );

        routes.MapRoute(
            "Root",
            "",
            new { controller = "Things", action = "Index" }
        );

これは、mysite.com/id/year に移動するまで正常に機能します。この時点で、最初のルートは ID をコントローラーとして扱い、年をアクションとして扱います。どうすればこれを解決できますか?

4

2 に答える 2

0

ルーティング エンジンは、

/{controller}/{action}/{id}/{ThingId}/{year}

id パラメータはオプションであるため、ThingId が id であるという制約はありません。

最初に RootSpecificRecord ルートを配置し、整数のみを受け入れるように Id を変更してみてください。これにより、通常のルートよりも具体的になります。もちろん、thingID が整数であると仮定すると、次のようにルートを変更できます。

        routes.MapRoute(
            "RootSpecificRecord",
            "{thingID}/{year}",
            new { controller = "Things", action = "CurrentThing", year = DateTime.Now.Year },
            new {thingID= @".*\d+.*" }
        );

別の制約を作成する場合は、ルート制約に関するこのブログ投稿を参照してください。

于 2012-08-21T15:08:11.760 に答える