将Membership.GetAllUsers()强制转换为通用列表时出现NotSupportedException

我试图在.NET Membership.GetAllUsers()集合中使用LINQ,例如在获取所有用户名时:

var usernames = Membership.GetAllUsers().Cast().Select(x=>x.UserName).ToList(); 

但VS告诉我它不受支持..

成员身份是Web.Security的一部分,与MembershipUser相同

这是我的连接字符串(如果有任何相关性):

   

堆栈跟踪:

用户代码未处理System.NotSupportedException
消息=不支持指定的方法。
Source = System.Web.Extensions StackTrace:System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider.GetAllUsers(Int32 pageIndex,Int32 pageSize,Int32&totalRecords)at System.Web.Security.Membership.GetAllUsers(Int32 pageIndex,Int32 pageSize,Int32&totalRecords) )位于Bedriftsmelding的C:\ Projects \ Bedriftsmelding \ Bedriftsmelding.Nettside \ Models \ CompanyUsers.cs:第26行的Bedriftsmelding.Nettside.Models.CompanyUsers.GetUserIdFromUserName(String username)中的System.Web.Security.Membership.GetAllUsers()。 C:\ Projects \ Bedriftsmelding \ Bedriftsmelding.Tests \ DTO \ CompanyUsersTest.cs中的Tests.DTO.CompanyUsersTest.TestGetUserIdFromUserName():第16行InnerException:

看起来您使用的是ClientFormsAuthenticationMembershipProvider而不是默认的SqlMembershipProvider。

根据ClientFormsAuthenticationMembershipProvider的文档,不支持GetllAllUsers并抛出不支持的exception。

http://msdn.microsoft.com/en-us/library/system.web.clientservices.providers.clientformsauthenticationmembershipprovider.getallusers.aspx

似乎只有基本的ValiateUser和一些其他函数可以与此提供程序一起使用,因为它是为与Ajax扩展一起使用而设计的。 用户function都不起作用,例如GetUser,GetAllUsers,DeleteUser,CreateUser等……

在阅读本主题之前,我遇到了同样的问题: SimpleMembership,Membership Providers,Universal Providers以及新的ASP.NET 4.5 Web窗体和ASP.NET MVC 4模板 。

一个简单的答案是,MVC4中的成员机制与MVC3及之前的成员机制完全不同。 还有来自asp.net MVC项目PM的其他信息。 我认为这是一种趋势,值得尝试从头开始重建我的相关代码。