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

各区域登记为下窗体身份验证新的应用程序和所有用户和角色应当分开。