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

时间:2012-10-15 23:18:06

标签: c# .net asp.net-membership

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

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

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

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

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

   <add name="ApplicationServices" connectionString="Data Source=somerserver.xx\SQLEXPRESS;Initial Catalog=bedriftsmelding;User Id=SomeUser;Password=SomePassword;Integrated Security=False" providerName="System.Data.SqlClient" />

堆栈追踪:

  

System.NotSupportedException未被用户代码
处理   消息=不支持指定的方法   Source = System.Web.Extensions StackTrace:          在System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider.GetAllUsers(Int32)   pageIndex,Int32 pageSize,Int32&amp;共条记录)          在System.Web.Security.Membership.GetAllUsers(Int32 pageIndex,Int32 pageSize,Int32&amp; totalRecords)          在System.Web.Security.Membership.GetAllUsers()          at Bedriftsmelding.Nettside.Models.CompanyUsers.GetUserIdFromUserName(String   用户名)   C:\项目\ Bedriftsmelding \ Bedriftsmelding.Nettside \型号\ CompanyUsers.cs:行   26          在Bedriftsmelding.Tests.DTO.CompanyUsersTest.TestGetUserIdFromUserName()   在   C:\项目\ Bedriftsmelding \ Bedriftsmelding.Tests \ DTO \ CompanyUsersTest.cs:行   16 InnerException:

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

在我阅读这个主题之前,我遇到了同样的问题:SimpleMembership, Membership Providers, Universal Providers and the new ASP.NET 4.5 Web Forms and ASP.NET MVC 4 templates

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