Membership.GetUser()使用Guid

时间:2011-12-19 20:15:36

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

我找到了Membership.GetUser(),但它似乎并不支持 通过UserId Guid重新获取用户信息。有没有人有一个好的 干净的方式吗?

public MembershipUser User { // get...;set...;}

我的代码在这里失败了......

User = Membership.GetUser(dr.GetValue(dr.GetOrdinal("Id"))); //fail

错误消息:specified method is not supported

5 个答案:

答案 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