2012-10-15 36 views
3

我试图让所有的用户名时使用LINQ在.NET Membership.GetAllUsers()集合,例如当:NotSupportedException异常铸造Membership.GetAllUsers()到泛型列表

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是由用户代码未处理
消息=不支持指定的方法。
源= System.Web.Extensions程序堆栈跟踪: 在System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider.GetAllUsers(的Int32 的PageIndex,的Int32 pageSize的,的Int32 &总记录) 在System.Web.Security.Membership.GetAllUsers(的Int32的PageIndex ,的Int32的pageSize,的Int32 &总记录) 在System.Web.Security.Membership.GetAllUsers() 在Bedriftsmelding.Nettside.Models.CompanyUsers.GetUserIdFromUserName(字符串 用户名)中 C:\项目\ Bedriftsmelding \ Bedriftsmelding.Nettside \ Models \ CompanyUsers.cs:行 at Bedriftsmelding.Tests.DTO.CompanyUsersTest.TestGetUserIdFromUs erName() 在 C:\项目\ Bedriftsmelding \ Bedriftsmelding.Tests \ DTO \ CompanyUsersTest.cs:行 16的InnerException:

+0

什么是堆栈跟踪? – SLaks

+0

我已将它添加到问题中,谢谢 – Sindre

+0

您将不得不为该集合使用'foreach'。 – Silvermind

回答

4

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

根据ClientFormsAuthenticationMembershipProvider的文档,不支持GetllAllUsers并引发不支持的异常。

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

看来,只有基本ValiateUser和其他几个函数与此供应商合作,因为它的设计与阿贾克斯的扩展使用。没有一个用户功能的工作,如GetUser,GetAllUsers,DeleteUser,CreateUser等...

+0

嗯,这听起来似乎合理。你是如何得出这个结论的?我怎么能证实这是真的?最后,我如何更改为默认提供者? – Sindre

+3

@Sindre - “根据文档”的哪些部分,并提供了上述文档的链接,以供您查看自己不清楚?我通过检查文档并注意到它说的“这个方法总是抛出一个异常”,“得出了这个结论”。并查看“这个方法不被这个类使用”的概述。关于GetAllUsers。我还注意到它对我提到的其他方法说了同样的话。 –

+0

好吧,当然是男人。感谢您的帮助 – Sindre