每个区域会员的ASP.Net MVC

时间:2010-04-30 19:44:14

标签: asp.net-mvc asp.net-membership membership membership-provider asp.net-mvc-areas

我正在构建一个ASP.Net MVC应用程序,该应用程序将在共享主机帐户上运行以托管多个域。我从包含成员资格的默认模板开始,并为每个域创建了一个mvc区域。路由设置为指向正确的区域,具体取决于请求所在的域。现在我想设置特定于每个mvc区域的成员资格。我首先尝试了显而易见的尝试,并尝试覆盖每个区域的web.config部分,以更改提供程序的applicationName属性。这不起作用,因为该区域未设置为应用程序根目录。是否有一种简单的方法来区分每个区域的用户?

1 个答案:

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

现在,每个区域都在表单身份验证下注册为新应用程序,并且所有用户和角色应保持独立。