1

通常のデフォルト ルート (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それだけ
4

1 に答える 1