0

私は次のURLを持っています

  1. URL/説明
  2. URL/ホーム/メンバー/説明
  3. URL/ホーム/説明

これが私のルートです

上記の#1の場合:

 routes.MapRoute(
                name: "DescriptionNoController",
                url: "{d}",
                defaults: new {controller = "Home", action = "Index", d = UrlParameter.Optional}
                );

上記の#2の場合:

 routes.MapRoute(
                name: "DescriptionDefault",
                url: "{controller}/{action}/{d}",
                defaults: new {controller = "Home", action = "Index", d = UrlParameter.Optional}
                );

#3で問題が発生しました。

できると思った

 routes.MapRoute(
                name: "DescriptionDefaultNoAction",
                url: "{controller}/{d}",
                defaults: new { controller = "Home", action = "Index", d = UrlParameter.Optional }
                );

しかし、これは無限ループを作成します。基本的に、#3の例で「ホーム/説明」をホームコントローラーとインデックスアクションにマップする必要があります。助けていただければ幸いです!

4

1 に答える 1

0

ここでの問題は、シナリオ3がルート構成2と一致することです。これは、説明がアクションであり、{d}の部分がないと見なされるためです。

これを回避する唯一の方法は、非常に特定のルートを用意することであり、シナリオ2の前にシナリオ3に対応する必要があります。

追加する必要がある最後のルートは、これがすべてのキャッチです。

routes.MapRoute(
            name: "DescriptionDefault",
            url: "{controller}/{action}/{d}",
            defaults: new {controller = "Home", action = "Index", d = UrlParameter.Optional}
            );

あなたの質問から明らかでないのは、あなたのURLの説明部分がプレースホルダーなのかリテラル値なのかということです。文字通りの場合は、ルート設定でそれを利用します。

于 2012-07-13T16:30:37.643 に答える