2

次の MapRoute がある場合:

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

次のような URL を持つことができます。

blabla.com/Home/Index/123

しかし、これを行うには、どのような MapRoute を作成する必要がありますか?

blabla.com/Home/123またはblabla.com/Home/DEADBEEF

私はそれが次の線に沿った何かを含むと想像します "{controller}/{id}/{action}"

アクションと id が逆になっていて、デフォルトのアクションがあるはずです。しかし、MapRoute はどのコントローラーをこのように扱うべきかをどのように判断するのでしょうか?

4

2 に答える 2

3

おそらく、これらの線に沿って何かが必要です。

  routes.MapRoute(
      name: "DefaultRoute",
      url: "Home/{action}",
      defaults: new { controller = "Home", action = "Index" },
      constraints: new { action = "[A-Za-z]*" }
  );

またはアクションなし

  routes.MapRoute(
      name: "DefaultRoute",
      url: "Home/{id}",
      defaults: new { controller = "Home", action = "Index", id = "" },
      constraints: new { id = "[A-Za-z]*" }
  );

ルート名が、セットアップした他のルートとは異なることを確認し、ルートの順序に注意を払う必要があります。同様の他のルートが互いに上書きされる可能性があるからです。この場合、おそらくデフォルト ルートの前にこれが必要になることを確認してください。ただし、デフォルト ルートがオーバーライドされることに注意してください。

コントローラーやアクションがない場合は、デフォルトを設定でき、ルート内でそれらを必要としません。

制約に関しては、上記のように、制約パラメーターをルートに追加して、特定の属性の正規表現を設定するだけです。

編集:必要に応じて、ルーティングの詳細について役立つリンクをいくつか示します。

于 2013-01-16T11:33:00.063 に答える
2

次のようなルートを追加できます。

routes.MapRoute(
    "CustomRoute",
    "Home/{id}",
    new { controller = "Home", action = "Index", id = "" });

デフォルトルートの上に配置してください。ただし、このルートはHomeControllerの他のすべてのアクションをブロックします。idパラメータに制約がないため、フレームワークは、URLでアクションまたはIDを参照しているかどうかを認識できない可能性があります。このルートが最初に来るので、idパラメーターにマップします。

于 2013-01-16T11:47:52.633 に答える