2011-12-19 31 views
3

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

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

我的代码不能在这里......

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

错误消息:specified method is not supported

+0

是什么'dr.GetValue'返回? – 2011-12-19 20:17:42

+0

dr.GetValue返回GUID – 2011-12-19 20:26:20

+0

@AbuHamzah:先将其转换为Guid变量,然后传递它并查看是否失败。 – 2011-12-19 20:28:16

回答

0

您可以在Membership.GetAllUsers()和匹配ProviderUserKey可能迭代,但@SLaks是正确的,ASP使用数字标识。

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); 
+1

不,一个重载的'Getuser'是'public static MembershipUser GetUser(object providerUserKey);',它接受一个ProviderUserKey,它在SqlMembershipProviders情况下是一个Guid。 – 2011-12-19 20:23:32

+0

@MystereMan:Touché。显示Guid经常查找的频率。 – 2011-12-19 20:27:17

+0

'如果((Guid)user.ProviderUserKey'没有ProvderUserKey – 2011-12-19 20:31:03

0

据我所看到的,基类MembershipProviderGetUser()方法与记号的重载:

​​

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)? 
2
  • Guid.Parse()Guid.TryParse()仅在.NET中可用4
  • 你不能投了string(猜测这所返回什么从dr.GetValue()Guid

那么试试这个来代替:

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

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

例如

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