Asp.net mvc ASP.NETMVC每区域成员资格

Asp.net mvc ASP.NETMVC每区域成员资格,asp.net-mvc,asp.net-membership,membership,membership-provider,asp.net-mvc-areas,Asp.net Mvc,Asp.net Membership,Membership,Membership Provider,Asp.net Mvc Areas,我正在构建一个ASP.NETMVC应用程序,它将在一个共享托管帐户上运行,以托管多个域。我从包含成员资格的默认模板开始,并为每个域创建了一个mvc区域。路由设置为指向正确的区域,具体取决于请求所针对的域。现在,我想针对每个mvc领域建立会员资格。我首先尝试了显而易见的方法,并尝试覆盖每个区域的web.config部分,以更改提供程序的applicationName属性。这不起作用,因为该区域未设置为应用程序根。是否有一种简单的方法来区分每个区域的用户?我想我有一个有效的解决方案,可以让每个区域完

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

我想我有一个有效的解决方案,可以让每个区域完全分开。使用默认模板作为起点,我向MVCAPApplication1.Models.AccountMembershipService类添加了另一个构造函数以接受字符串(还修改了现有构造函数以消除歧义)

然后,我将AccountController复制到每个区域中,并修改初始化重载以包含路由数据中的区域名称

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

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

我有点好奇,为什么你要利用这些领域来做这件事。这并不是他们的正常使用情况。您所描述的是一个多租户应用程序。搜索这个词,你会发现几个例子。@Malloch我这样做是因为我便宜,而且我喜欢干净的URL.:)我有一个托管帐户,但维护我自己的个人域名,还有一个用于我的教堂,我正在为我妻子的摄影创建一个。这种设置允许我将每个域作为一个逻辑上独立的mvc区域,为每个域维护干净的URL,同时仍然只使用一个托管帐户和一个sql数据库。正常的用例使用彩虹独角兽。
    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);
    }