我正在构建一个ASP.Net MVC应用程序,该应用程序将在共享主机帐户上运行以托管多个域。我从包含成员资格的默认模板开始,并为每个域创建了一个mvc区域。路由设置为指向正确的区域,具体取决于请求所在的域。现在我想设置特定于每个mvc区域的成员资格。我首先尝试了显而易见的尝试,并尝试覆盖每个区域的web.config部分,以更改提供程序的applicationName属性。这不起作用,因为该区域未设置为应用程序根目录。是否有一种简单的方法来区分每个区域的用户?
答案 0 :(得分: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);
}
现在,每个区域都在表单身份验证下注册为新应用程序,并且所有用户和角色应保持独立。