会社エリアのある MVC4 アプリがあります。
与えられたファイル構造:
Areas
\
Companies
\
Controllers
|
DefaultController (Contains Index and Edit actions)
TestController (Contains Index and Test action)
URL を次のようにしたい:
- /会社
- /企業/編集
- /会社/テスト
- /会社/テスト/テスト
私のルートは、CompanysAreaRegistration クラスのように設定されています。
context.MapRoute(
name: "Companies_default",
url: "Companies/{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
結果:
- /会社 - 作品
- /会社/編集 - 404
- /会社/デフォルト/編集 - 作品
- /会社/テスト - 作品
- /会社/テスト/テスト - 作品
URL に "Default" を指定せずに DefaultController.Edit() アクションにアクセスするにはどうすればよいですか?
アップデート
ブラッドの答えに基づいて、このようなパスをハードコーディングでき、それが機能することを知っています。私は本当に自動解決策をもっと望んでいました。一部のエリアのデフォルト コントローラーで、最終的にいくつのアクションが実行されるかわかりません。毎回新しいルートを作成する必要はありません。
これは、App_Start/RouteConfig.cs ファイルの MVC テンプレートの一部として追加された既定のルートです。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
HomeController に "Test" というアクションがある場合、URL /Test を使用してそのアクションを実行できます。これを機能させるために、"/Test/{id}" のような URL で新しいルートを追加する必要はありません。URL の {controller} 部分を無視し、デフォルトのコントローラー構成を使用しているようです。
エリアで行うと、この動作が変わるのはなぜですか?
Area ルートは、URL の "Companies/" プレフィックスを除いて、Default ルートとまったく同じです。
テストとして、デフォルト ルート URL を に変更しましたが、url: "Example/{controller}/{action}/{id}"
引き続きURL /Example/Test で HomeController.Test() にアクセスできます。