1. ホーム
  2. asp.net-mvc

[解決済み] プロジェクトに同じ名前のコントローラが複数ある場合の問題点

2023-01-09 19:46:45

質問

ASP.NET MVC 3 プロジェクトで、次のようなエラーが発生しました。

Homeという名前のコントローラに一致する型が複数見つかりました。 という名前のコントローラに一致する複数のタイプが見つかりました。これは このリクエストを処理するルート('Home/{action}/{id}')が このリクエストを処理するルート ('Home/{action}/{id}') が を検索するための名前空間を指定していない場合に起こります。 コントローラを検索するための名前空間を指定していない場合に発生します。 このような場合は、この のオーバーロードをコールすることで、 このルートを登録します。 MapRoute' メソッドのオーバーロードをコールして、 ルートを登録します。 メソッドのオーバーロードをコールします。

Home' へのリクエストは、以下のコントローラにマッチしました。 以下のコントローラにマッチします。 MyCompany.MyProject.WebMvc.Controllers.HomeController に一致するコントローラが見つかりました。 MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController です。

デフォルトのコントローラフォルダに HomeController があり、クラス名が MyCompany.MyProject.WebMvc.Controllers.HomeController になっています。

私のglobal.asaxのRegisterRoutesメソッドは、次のようになります。

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

そして Company というエリアがあり、そのエリアのデフォルトコントローラフォルダに HomeController があり、クラス名が MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController になっています。

CompanyAreaRegistration ファイルの RegisterArea メソッドは次のようになります。

   public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Company_default",
            "Company/{controller}/{action}/{id}",
            new { area = "Company", action = "Index", id = UrlParameter.Optional }
        );
    }

これはすべて、私がこの投稿の冒頭で強調したエラーを導いています。私は、他のさまざまな投稿から解決策をまとめようと奮闘しています。 NO LUCK .

デフォルトのコントローラフォルダにHomeControllerを置き、各エリアに1つずつ置くことは可能でしょうか?もしそうなら、これを動作させるために設定ファイルを変更する必要がありますか (私がすると仮定して)。

どのようなヘルプでも、とても感謝します!

どのように解決するのですか?

エラーメッセージには推奨される解決方法が記載されています: "この場合、「namespaces」パラメータを受け取る「MapRoute」メソッドのオーバーロードを呼び出して、このルートを登録してください。

routes.MapRoute(
     "Default", // Route name
     "{controller}/{action}/{id}", // URL with parameters
     new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
     new string[] { "MyCompany.MyProject.WebMvc.Controllers"}
);

これは http://server/ は HomeController の Index アクションに移動します。 http://server/company/home は、エリア登録で定義された Company エリアの HomeController の Index アクションに移動します。