通常のデフォルト ルート (API ルートを含む) が定義された MVC 4 サイトと、独自のルートを持つ管理機能用の領域があります。ルーティング構成は次のようになります。
デフォルトルート:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyProject.Controllers" }
);
デフォルトの API ルート:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
管理エリア ルート (エリア登録コード内):
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyProject.Areas.Admin.Controllers" }
);
さらに、管理領域には、ビュー用の独自のレイアウト ページがあります。
メイン サイトのルートはすべて (API コントローラーの HTTP ルートを含めて) 正しく機能しますが、管理領域のルートは奇妙な動作を示します。管理領域のホーム コントローラへの要求は成功しますが、管理領域の他のコントローラへの要求は成功しません。私が得るエラーは
System.Web.HttpException: The controller for path '/admin/concerts' was not found or does not implement IController.
興味深いことに、例外に関連付けられたスタック トレースには、管理領域のレイアウト ページではなく、メインのレイアウト ページからのコードが含まれています。これは、リクエストが管理ルートではなくデフォルト ルートにルーティングされたことを示唆していると思います。
Glimpse を使用してルート構成をデバッグしようとしましたが、管理領域の HomeController ではルートが正しく機能するが、その領域内の他のコントローラーでは機能しないことを 2 番目の媒体で確認する以外は、うまくいきませんでした。
アップデート:
次の関連するコントローラーが定義されています。
- デフォルトルート:
MyProject.Controllers.ConcertsController
MyProject.Controllers.HomeController
- (その他、ここでは関係ありません。)
- デフォルトの HTTP ルート:
MyProject.Controllers.Api.ConcertsController
それだけ
- 管理エリア ルート:
MyProject.Areas.Admin.Controllers.ConcertsController
; とMyProject.Areas.Admin.Controllers.HomeController
それだけ