1. ホーム
  2. c#

[解決済み] Home'という名前のコントローラに一致するタイプが複数見つかりました。

2022-02-14 02:12:57

質問

現在、2つの無関係なMVC3プロジェクトがオンラインでホストされています。

1つは問題なく動作しますが、もう1つは動作せず、エラーが発生します。

Home' という名前のコントローラに一致する型が複数見つかりました。これは このリクエストを処理するルートは、次のような場合に発生する可能性があります。 ('{controller}/{action}/{id}') は、検索するための名前空間を指定しません。 を使用することで、リクエストに一致するコントローラを見つけることができます。

このような場合 MapRoute' メソッドのオーバーロードを呼び出して、このルートを登録します。 は 'namespaces' パラメータを受け取ります。

私のホスティング会社は、私にFTPアクセス権を与え、そのフォルダーの中に、私のアプリケーションごとに2つの別のフォルダーを持つという仕組みになっています。

<ブロッククオート

ftpFolderA2/foo.com

ftpFolderA2/bar.com

foo.comは問題なく動作します。私は自分のアプリケーションをローカルのファイルシステムに公開し、コンテンツをFTPで送信して動作します。

bar.comをアップロードして実行しようとすると、上記の問題が発生し、私のサイトを使用することができなくなります。 foo.comが動作している間、すべて .

bar.comは、ftpFolderA2内のあらゆる場所のコントローラから検索し、その結果、別の HomeController ? どうすればControllerフォルダ内だけを見るようにできますか?

事実です。

  1. エリアを使用しない これらは全く関係のない2つのプロジェクトです。公開されたプロジェクトは、それぞれのフォルダに配置しています。何も派手なことはしていません。
  2. 各プロジェクトには、1つのHomeControllerしかありません。

どなたか、これが問題であることを確認できますか?

解決方法は?

このエラーメッセージは、エリアを使っていて、かつ 同じコントローラ の名前は、エリアとルートの内部で使用されます。たとえば、次の2つがあります。

  • ~/Controllers/HomeController.cs
  • ~/Areas/Admin/Controllers/HomeController.cs

この問題を解決するために(エラーメッセージが示唆しているように)、ルートを宣言するときに名前空間を使用することができます。ですから、メインのルート定義で Global.asax :

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Controllers" }
);

で、あなたの ~/Areas/Admin/AdminAreaRegistration.cs :

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new[] { "AppName.Areas.Admin.Controllers" }
);

領域を使用しない場合、両方のアプリケーションが同じASP.NETアプリケーション内でホストされており、同じコントローラを異なるネームスペースで定義しているために競合が発生していると思われます。このような競合を避けるには、2つのアプリケーションを別々のASP.NETアプリケーションとしてホストするようにIISを設定する必要があります。サーバーにアクセスできない場合は、ホスティングプロバイダーに依頼してください。