3

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

4

1 回答 1

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

现在每个区域都在表单身份验证下注册为一个新应用程序,所有用户和角色都应该分开。

于 2010-05-01T15:16:49.207 回答