2011-12-19 30 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>