3

我正在構建一個ASP.Net MVC應用程序,該應用程序將在共享託管帳戶上運行以託管多個域。我開始使用包含成員資格的默認模板,併爲每個域創建了一個mvc區域。路由設置爲根據請求所針對的域指向正確的區域。現在我想建立特定於每個mvc區域的成員資格。我首先嚐試了一下,並試圖覆蓋每個區域的web.config部分,以更改提供程序的applicationName屬性。這不起作用,因爲該區域未設置爲應用程序根目錄。是否有一種簡單的方法可以將每個區域的用戶分開?ASP.Net MVC每區域會員

+1

我有點好奇,你爲什麼要利用區域來做到這一點開始。這對他們來說並不是真正的用例。 – Mallioch 2010-04-30 19:51:43

+0

你所描述的是一個多租戶應用程序。搜索這個術語,你會發現幾個例子。 – 2010-04-30 19:53:43

+1

@Mallioch我這樣做是因爲我便宜,我喜歡乾淨的網址。 :)我有一個託管賬戶,但維護我自己的個人領域,以及一個爲我的教會,我開始一個爲我的妻子的攝影。這種設置允許我保持每個域作爲一個邏輯上獨立的mvc區域,爲每個域維護乾淨的URL,同時仍然只使用一個主機帳戶和一個sql數據庫。 – AdmSteck 2010-04-30 20:03:21

回答

2

我想我有一個工作解決方案,可以將每個區域完全分開。使用默認模板作爲起點,我向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); 
    } 

各區域登記爲下窗體身份驗證新的應用程序和所有用戶和角色應當分開。