MVC4中的SimpleMembershipProvider在初始化时会对方法抛出NotSupportedException

时间:2012-10-10 12:18:39

标签: asp.net asp.net-mvc-4 simplemembership

我正在使用ASP.net MVC4模板的内置SimpleMembership,并希望创建一个管理面板来重置用户群上的密码和类似操作。

我使用SecurityGuard.MVC4 nuget作为起点,并在大多数操作中获得NotSupportedException。 SecurityGuard使用控制器的Membership属性在SimpleMembershipProvider上调用诸如GetAllUsers(),GetUser()和ResetPassword()之类的方法,并且它们都抛出NotSupportedException。从文档来看,这似乎是设计的:

SimpleMembershipProvider.GetAllUsers

  

注意:如果已使用初始化SimpleMembershipProvider类   调用WebSecurity.InitializeDatabaseConnection()方法,这个   方法不受支持,并将抛出NotSupportedException   例外。但是,如果WebSecurity.InitializeDatabaseConnection()   方法尚未调用,如果您已将站点配置为   使用标准的ASP.NET成员资格提供程序,传递此方法   通过标准会员提供者。

我错过了什么?看来我需要选择使用WebSecurity来处理WebSecurity.CreateUser()之类的标准内容并直接使用提供程序吗?

我可以解决这个问题,但我很担心为什么我不能同时解决这两个问题?

1 个答案:

答案 0 :(得分:6)

SimpleMembership是故意设计的......好吧,简单。 WebSecurity使用SimpleMembership,并使用ExtendedMembershipProvider派生的SimpleMembership类。

基本上,SimpleMembership不实现WebSecurity中不存在的任何功能,而GetAllUsers就是其中之一。是的,这是设计的。

您有几种选择。所有这些都是解决方法。

  1. 您只需执行自己的查询即可获得所有用户。
  2. 您可以创建从SimpleMembership派生的自己的成员资格提供程序并实现这些功能
  3. 您可以返回SqlMembershipProvider(或Universal Providers)(但避开WebSecurity)