【问题标题】:Membership.GetUser() using GuidMembership.GetUser() 使用 Guid
【发布时间】:2011-12-19 20:15:36
【问题描述】:

我找到了 Membership.GetUser() 但它似乎不支持 通过 UserId Guid 检索用户信息。有没有人好看 和干净的方式吗?

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

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

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

错误信息:specified method is not supported

【问题讨论】:

  • dr.GetValue 返回什么?
  • @AbuHamzah:先将其转换或转换为 Guid 变量,然后传递它,看看它是否失败。
  • 你在用什么MembershipProvider
  • @Abu Hamzah:那么请看下面我的回答,我相信您需要指定是否更新用户的LastActivityDate 字段作为GetUser() 调用的一部分。

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


【解决方案1】:
  • Guid.Parse()Guid.TryParse() 仅在 .NET 4 中可用。
  • 你不能转换 string(猜猜这是从 dr.GetValue() 返回到 Guid

所以试试这个吧:

MembershipUser m = Membership.GetUser(new Guid(
  dr.GetValue(dr.GetOrdinal("Id"))
));

【讨论】:

    【解决方案2】:

    您可以遍历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);
    

    【讨论】:

    • 不,Getuser 的一个重载是 public static MembershipUser GetUser(object providerUserKey);,它采用 ProviderUserKey,在 SqlMembershipProviders 情况下是 Guid。
    • @MystereMan:Touché。显示我通过 Guid 查找的频率。
    • if ((Guid)user.ProviderUserKey 没有 ProvderUserKey
    • @AbuHamzah:那你使用什么会员服务提供商?默认的 ASP 之一?还是您还在使用 ASP .NET 1?
    【解决方案3】:

    据我所见,基类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)?
    

    【讨论】:

      【解决方案4】:

      在您的 web.config 或 app.config 中检查您的会员提供商设置

      例如

      <system.web>
        <membership>
          <providers>
            <clear/>
            <add name="AspNetSqlMembershipProvider" connectionStringName="LocalSqlServer" .../>
          </providers>
        </membership>
      </system.web>
      

      【讨论】:

        【解决方案5】:

        未来读者注意:

        SimpleMembershipProvider 没有实现Membership.GetUser(object providerUserKey) 方法http://msdn.microsoft.com/en-us/library/gg569140(v=vs.111).aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-08
          • 2017-11-25
          相关资源
          最近更新 更多