1

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 }
        );
    }
}

どうすればこれを処理できますか?

4

2 に答える 2

2

私が見ることができるものから、エリアルートはうまく見えます。要求を Web エリアに送信するように、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 }
            );

    }
于 2012-04-06T13:26:40.557 に答える
1

Jonathan Sのソリューションは間違いなく試してみる価値があると思いますが、別のアプローチを検討することもできます。これは、webファイルをデフォルトの場所に配置することです。エリアがリクエストに含まれていない場合、ルーティングエンジンはエリア内でこれらのファイルを検索しません。

于 2012-04-06T14:05:13.327 に答える