MVC プロジェクトを複数の領域に分割しようとしています。したがって、1) crm 2) サービス 3) Web の 3 つの領域があります。PublicWeb をデフォルトにしたい。つまり、www.mysitename.com/mycontroller/myaction (間にエリア名なし) のようにアクセスし、他の 2 つにはエリア名 (www.mysitename.com/crm/mycontroller/myaction) でアクセスする必要があります。どのようなルーティング/エリア構成が必要ですか? 試し AreaRegistration.RegisterAllAreas();
てみましたが、デフォルトのもの(Web)でのみ機能します。他の2つにアクセスすると、404エラーがスローされました。
以下のように個別に登録してみました
var area2reg = new crmAreaRegistration();
var area2context = new AreaRegistrationContext(area2reg.AreaName, RouteTable.Routes);
area2reg.RegisterArea(area2context);
var area1reg = new webAreaRegistration();
var area1context = new AreaRegistrationContext(area1reg.AreaName, RouteTable.Routes);
area1reg.RegisterArea(area1context);
その後、私のpublicwebは機能します。しかし、フォーラムにアクセスすると、このエラーがスローされました。
「home」という名前のコントローラに一致する複数のタイプが見つかりました。これは、このリクエスト ('crm/{controller}/{action}/{id}') を処理するルートが、リクエストに一致するコントローラーを検索するための名前空間を指定していない場合に発生する可能性があります。この場合は、'namespaces' パラメーターを取る 'MapRoute' メソッドのオーバーロードを呼び出して、このルートを登録します。
私のRegisterArea関数web
はこれです
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"web_default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
そして、crm
これはこれです
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"crm_default",
"crm/{controller}/{action}/{id}",
new { controller = "home", action = "Index", id = UrlParameter.Optional }
);
}
}
どうすればこれを処理できますか?