首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MVC2.0定制RoleProvider

用MVC2.0定制RoleProvider
EN

Stack Overflow用户
提问于 2009-12-08 15:11:12
回答 2查看 1.6K关注 0票数 2

我在应用程序中设置了一个自定义成员资格和角色提供程序。在ASP .Net Webforms中,我使用相同的提供程序,并且在编译和运行应用程序时,由于web.config中的引用而初始化提供程序。

当我将它移到MVC中,并将断点放在这些类的"Initialize“方法中时,就不会发生中断。

一个奇怪的问题是:如果我在控制器中使用“GetRolesForUser(Roles= "MYROLE")”进程并按下该操作,那么它就会被释放到Roleprovider,自动调用"GetRolesForUser“,但仍然不会命中初始化。这是一个问题,因为我需要在调用任何方法之前设置某些变量。

我知道我可以直接调用"Initialize“,但是我会认为这是自动完成的,就像在ASP Webforms中一样。

我是否必须在MVC中手动初始化这些内容,还是遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2011-07-13 03:49:01

需要考虑的几点是,首先成员和角色提供者是静态的,通常只有在应用程序中第一次访问它们时才初始化它们。当在Web.Config中正确设置时,当第一次访问它们时,它们将调用初始化。

通过使用一组基本提供者和默认的ASP.NET MVC 2应用程序进行一些测试,我发现RoleProvider通常在应用程序启动时立即初始化。但是,需要注意的是,如果您希望重新初始化提供程序,则必须停止开发web服务器(或iis express,或清除应用程序池)。这样,应用程序就会重新启动。如果没有,并且已经初始化了提供程序,那么它将永远不会到达那些断点,因为它已经运行了。

此外,当获得成员资格提供程序的实例时,不要通过创建类的新实例(例如var provider =新的MyMembershipProvider())来实现,因为这不会调用初始化方法。确保通过Membership.Provider获得您的提供程序,它将处理您正确配置的web.config提供程序的所有设置。

仔细查看AccountModels文件中的默认MVC 2应用程序(~第101行)提供了一个很好的示例。

代码语言:javascript
复制
_provider = provider ?? Membership.Provider;

第一次访问它时,它将实例化默认的成员资格提供程序并调用初始化。在此之后,它将保持对应用程序的静态状态,并且在从内存中卸载应用程序之前不会再次调用。即。停止vs web开发服务器。

另外,获取特定成员资格提供程序的另一种类似方法也可以在以下站点找到:How do I call Initialize on a custom MembershipProvider?

希望这会有所帮助:)

票数 0
EN

Stack Overflow用户

发布于 2009-12-08 17:30:26

Jay,我认为它们的工作方式与角色/成员资格提供者在ASP.NET WebForms中的工作方式相同。

您应该尝试的一件事是创建自定义的授权过滤器来调用您的应用程序方法,如下所示:

代码语言:javascript
复制
public class MyAuthorizeAttribute: FilterAttribute, IAuthorizationFilter
{    
    public string Role { get; set; }

    #region IAuthorizationFilter Members    
        public void OnAuthorization(AuthorizationContext filterContext)    
        {        
            // add your logic here like 
            // var userRoles = MyCustomProvider.GetRolesForUser(filterContext.HttpContext.User.Identity);
            // if(!userRoles.Contains(Role))
            // .....
        }    
    #endregion
}

然后在您的操作中使用[MyAuthorize(Role = "MYROLE")]

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1867598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档