我想我有一個工作解決方案,可以將每個區域完全分開。使用默認模板作爲起點,我向MvcApplication1.Models.AccountMembershipService類添加了另一個構造函數來接受一個字符串(還修改了現有構造函數以消除不明確性)。
public AccountMembershipService()
{
_provider = Membership.Provider;
}
public AccountMembershipService(MembershipProvider provider)
{
_provider = provider ?? Membership.Provider;
}
public AccountMembershipService(string applicationName)
: this()
{
_provider.ApplicationName = applicationName;
}
然後我將AccountController複製到每個區域並修改Initialize重載以包含路由數據中的區域名稱。現在
protected override void Initialize(RequestContext requestContext)
{
if (FormsService == null) { FormsService = new FormsAuthenticationService(); }
if (MembershipService == null) { MembershipService = new AccountMembershipService(requestContext.RouteData.DataTokens["area"].ToString()); }
base.Initialize(requestContext);
}
各區域登記爲下窗體身份驗證新的應用程序和所有用戶和角色應當分開。
我有點好奇,你爲什麼要利用區域來做到這一點開始。這對他們來說並不是真正的用例。 – Mallioch 2010-04-30 19:51:43
你所描述的是一個多租戶應用程序。搜索這個術語,你會發現幾個例子。 – 2010-04-30 19:53:43
@Mallioch我這樣做是因爲我便宜,我喜歡乾淨的網址。 :)我有一個託管賬戶,但維護我自己的個人領域,以及一個爲我的教會,我開始一個爲我的妻子的攝影。這種設置允許我保持每個域作爲一個邏輯上獨立的mvc區域,爲每個域維護乾淨的URL,同時仍然只使用一個主機帳戶和一個sql數據庫。 – AdmSteck 2010-04-30 20:03:21