「Account」という名前のコントローラーに一致する複数のタイプが見つかりました。これは、このリクエスト ('{controller}/{action}/{id}') を処理するルートが、リクエストに一致するコントローラーを検索するための名前空間を指定していない場合に発生する可能性があります。この場合は、'namespaces' パラメーターを取る 'MapRoute' メソッドのオーバーロードを呼び出して、このルートを登録します。
1 に答える
2 つの AccountController クラスがあります。に 1 つ、P247.ComplianceTracker.MVC.Controllers
にもう 1 つP247.CoachingTool.Mvc.Controllers
。
コントローラーを解決するコンポーネント (依存関係リゾルバー) は、規則に従ってこれを行います。つまり、Controller から継承するクラスを探し、命名規則 (リクエストでコントローラーがアカウントに設定されている場合は AccountController) に従います。両方のライブラリに、基準に一致するクラスがあります (または両方の名前空間に、この基準に一致するクラスが存在します)。
したがって、いくつかのオプションがあります。
- AccountController クラスの名前を変更します
- マッピングを変更します(エラーが提案するように)
InSystem.Web.Mvc.RouteCollectionExtensions
は、MapRoute
名前空間のリストをパラメーターとして受け取る拡張機能です。
public static Route MapRoute ( this RouteCollection routes, string name, string url, string[] namespaces );
したがって、登録は次のように変更できます。
routes.MapRoute (
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string [] { "P247.CoachingTool.Mvc.Controllers" }
);
routes.MapRoute (
name: "Default",
url: "compliance/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string [] { "P247.ComplianceTracker.MVC.Controllers" }
);
アカウント/インデックスにルーティングされたリクエストは によって処理されP247.CoachingTool.Mvc.Controllers.AccountController
、コンプライアンス/アカウント/インデックスへのリクエストは によって処理されP247.ComplianceTracker.MVC.Controllers.AccountController
ます。
注: URL は変更されるため、一部のマークアップまたはヘルパー関数の呼び出しを変更する必要がある場合があります。
補足: コードは私のマシンでコンパイルされます。同等のセットアップがないため、特定のセットアップに合わせて調整する必要があるかもしれません。