2011-12-19 13 views
3

私はMembership.GetUser()を見つけましたが、UserId Guidで のユーザー情報を取得することはできません。誰も素敵な とこれを行うクリーンな方法がありますか?Membership.GetUser()Guidを使用して

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

私のコードここで失敗している...

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

エラーメッセージ:specified method is not supported

+0

を実装していませんか? –

+0

dr.GetValueはGUIDを返す –

+0

@AbuHamzah:最初にGuid変数にキャストまたは変換して渡し、失敗したかどうかを確認します。 –

答えて

0

あなたはMembership.GetAllUsers()を反復処理すると、おそらくProviderUserKeyを一致させることができますが、@SLaksが正しい、ASPは、数値使用していますID。

foreach (var user in Membership.GetAllUsers()) 
{ 
    if ((Guid)user.ProviderUserKey == myguid) 
    return user; 
} 

EDIT @MystereManが指摘したように、GUIDを受け付けoverload to GetUserがある:

public static MembershipUser GetUser( 
    Object providerUserKey 
) 

がGetUserメソッドに渡し、その後、のGuidデータ型にあなたのdr結果をキャストしてみ(私は結果が無効であるか、キャストできないと思っています)。

Guid userId = Guid.Parse(dr.GetValue(dr.GetOrdinal("Id")); 
MembershipUser = Membership.GetUser(userId); 
+1

いいえ、 'Getuser'のオーバーロードは' public static MembershipUser GetUser(object providerUserKey); 'で、ProviderUserKeyをとります。これはSqlMembershipProvidersの場合、Guidです。 –

+0

@MystereMan:Touché。どのくらいの頻度で私がGuidを参照するかを示します。 –

+0

'if((Guid)user.ProviderUserKey'にProvderUserKeyがありません。 –

0

は、私が見ているところによると、基底クラスMembershipProviderは署名で過負荷GetUser()方法があります。だから、

​​

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()あなたはstring(つまり、返されたものだ推測をキャストすることはできません.NET 4.
  • でのみ利用可能です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> 
関連する問題