2012-04-06 5 views
1

MVCプロジェクトを複数の領域に分割しようとしています。だから私は3つの領域1)crm 2)サービス3)Webを持っています。私はPublicWebをデフォルトのものにします。これは、www.mysitename.com/mycontroller/myaction(その間のエリア名なし)とエリア名(www.mysitename.com/crm/mycontroller/myaction)でアクセスする他の2つのようにアクセスする必要があることを意味します。どんなルーティング/エリア設定が必要ですか?私はAreaRegistration.RegisterAllAreas();を試して、それは私のデフォルトの1つ(ウェブ)のためにのみ動作します。私は他の2つにアクセスすると、404エラーを投げた。ASP.NET MVCエリアルーティングがデフォルトルートで動作しない

私は1つ

 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作品のようindidually登録してみました。しかし、フォーラムにアクセスしたときにこのエラーが発生しました。

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

webのための私のRegisterArea機能は、この

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "web_default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

     ); 
    } 

あるとcrmのための1つが、私はこれを処理するにはどうすればよいこの

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

のですか?

答えて

1

私はジョナサンSのソリューションは、間違いなく試してみる価値はあると思いますが、別のアプローチを検討するかもしれません。それはあなたのwebファイルをデフォルトの場所に置くことです。エリアが要求の一部でない場合、ルーティングエンジンはエリアのファイルを検索しません。

2

私が見ることができるところからは、エリアルートはきれいに見えます。グローバルエリアへのリクエストを送信するためにGlobal.asaxのデフォルトルートを更新しましたか?以下のような

何か:

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

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", 
      new { area = "web", controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

    } 
+0

はい、私はデフォルトのルーティングとエリアを一緒に使用することをたくさん試しました。これが正しい解決策でなければなりません。 –