マルチテナント 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/のようになり、エリア名がありません。そのせいでしょうか?何が問題なのですか? 助けてください