我想我有一个工作解决方案,可以将每个区域完全分开。使用默认模板作为起点,我向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