我找到了Membership.GetUser(),但它似乎并不支持 通过UserId Guid重新获取用户信息。有没有人有一个好的 干净的方式吗?
public MembershipUser User { // get...;set...;}
我的代码在这里失败了......
User = Membership.GetUser(dr.GetValue(dr.GetOrdinal("Id"))); //fail
错误消息:specified method is not supported
答案 0 :(得分:2)
Guid.Parse()
和Guid.TryParse()
仅适用于.NET 4. string
(猜测从dr.GetValue()
返回到Guid
所以试试这个:
MembershipUser m = Membership.GetUser(new Guid(
dr.GetValue(dr.GetOrdinal("Id"))
));
答案 1 :(得分:0)
您可以迭代Membership.GetAllUsers()
并尽可能匹配ProviderUserKey
,但@SLaks是正确的,ASP使用数字ID。
foreach (var user in Membership.GetAllUsers())
{
if ((Guid)user.ProviderUserKey == myguid)
return user;
}
编辑正如@MystereMan所指出的,有一个overload to GetUser接受了一个Guid:
public static MembershipUser GetUser(
Object providerUserKey
)
尝试将您的dr
结果转换为Guid数据类型,然后将其传递给GetUser方法(我认为结果返回无效或无法转换)。
Guid userId = Guid.Parse(dr.GetValue(dr.GetOrdinal("Id"));
MembershipUser = Membership.GetUser(userId);
答案 2 :(得分:0)
根据我所看到的,基类MembershipProvider
有一个GetUser()
方法重载了签名:
GetUser(providerUserKey As Object, userIsOnline As Boolean)
和
GetUser(username As String, userIsOnline As Boolean)
所以......也许你错过了布尔?可能会有所不同,具体取决于您使用的提供商。它看起来确实适用于SqlMembershipProvider
。
http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.aspx
当然,这一定值得一试:
User = Membership.GetUser(dr.GetValue(dr.GetOrdinal("Id")), false); //(!fail)?
答案 3 :(得分:0)
在web.config或app.config中检查您的会员提供商设置
e.g。
<system.web>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" connectionStringName="LocalSqlServer" .../>
</providers>
</membership>
</system.web>
答案 4 :(得分:0)
未来读者请注意:
SimpleMembershipProvider未实现Membership.GetUser(object providerUserKey)
方法http://msdn.microsoft.com/en-us/library/gg569140(v=vs.111).aspx