2

マルチテナント MVC3 アプリケーションを実現しようとしています。サブドメイン リクエストを含むすべての URL リクエストは、メイン アプリケーションに送信されます。解決策は、デフォルトのメインコントローラーと「クライアント」という名前の領域を持つことです。なのでルートは2つ。

これはクライアントエリアにあります

context.MapRoute(
            "Client_default",
            "{controller}/{action}/{id}",
            new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional },
            new {controller = new ClientAreaConstraint()},
            new[] { "MainApp.UI.Areas.Clients.Controllers" });

これはグローバル asax で

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional },
            new[] { "MainApp.UI.Controllers" }
        );

1 つはエリア用、もう 1 つはメイン用です。エリアのルートに、URL にサブドメインがあるかどうかをチェックするルート制約を追加しました。そうであれば true を返します。

public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        var url = httpContext.Request.Headers["HOST"];
        var clientName = url.Split('.')[1];
        return clientName != "mainsite";
    } 

これは機能し、エリア コントローラーはサブドメイン リクエストを取得しています。しかし、return View() を呼び出そうとすると、エリア フォルダではなく、メイン フォルダでビューを探します。私の URL は http://www.client.mainsite.com/のようになり、エリア名がありません。そのせいでしょうか?何が問題なのですか? 助けてください

4

1 に答える 1

0

仮想パスがエリア名としてマッピングされているかどうかを確認します。デバッグするためだけにビジュアルスタジオでエリアアドレスを設定すると、仮想パスを作成するように求められました。そのため、AppRelativeCurrentExecutionFilePath は常に ~/ であり、ルーティングは領域を特定できませんでした。IIS Express の場合、サイトの仮想パスを削除します。

C:\Users\ユーザー名\Documents\IISExpress\config\applicationhost.config

私はそれを発見するのに4日を費やしました。

于 2013-04-07T15:27:43.527 に答える