2009-06-16 12 views
3

blah.com/kevinukのようにURLからユーザー名を取得しています。Membership.GetUser(username) - 正しいケーシングを返すには?

私は、メンバーシップテーブルに保存されているKevinUKを言うためにページのコンテンツを必要としますが、私が次のことをすると、入力と同じケーシングを返します。

MembershipUser member = Membership.GetUser(user); 
string userName = member.UserName; 

小文字のユーザー名をパラメータとして使用して、正しいケースでデータベースから値を戻すにはどうすればよいですか?

答えて

1

使用しているメンバシッププロバイダは不明ですが、簡単にそのメンバシッププロバイダから降りてGetUserメソッドをオーバーライドできます。

MembershipProviderクラスから継承したクラスを作成します。

public class MyMembershipProvider : MembershipProvider 

{ 

    public MyMembershipProvider() 

    { 

     // 

     // TODO: Add constructor logic here 

     // 

    } 

} 

getUserメソッドをオーバーライドします。

public override MembershipUser GetUser(string username, bool userIsOnline) 

{ 
... Logic here to do a case insensitive lookup... 

} 

は、最後にあなたの新しいプロバイダを使用するようにWeb構成を更新します。

<system.web> 
    <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="10"> 
     <providers> 
      <add name="MyMembershipProvider" type="Providers.FIFAMembershipProvider"  connectionStringName="ADConnectionString" ... /> 
     </providers> 
    </membership> 
</system.web> 

いくつかの例:

http://www.eggheadcafe.com/tutorials/aspnet/30c3a27d-89ff-4f87-9762-37431805ef81/aspnet-custom-membership.aspx

http://msdn.microsoft.com/en-us/library/ms366730(VS.80).aspx

2

残念ながら、Membership.GetUser(string username)メソッドは、単にMembershipUser8のユーザー名を渡されたパラメータの値に設定します。正しいケーシングを取得するには、ユーザーのGUIDを取得するMembership.GetUser(object providerUserKey)を使用するか、以前のメソッドとそれぞれのストアドプロシージャをオーバーライドして、適切に処理されたユーザー名を返す必要があります。

または、2つの異なるGetUser()メソッドへのバックツーバックコールを単純に行うことができますが、それはかなり無駄です。

0

同じ問題にStumpledと上記試してみました解決策=正しい方法を得るための最も簡単な方法ケーシング:

var user = Membership.GetUser(userName.Text); 
user = Membership.GetUser(user.ProviderUserKey); 
var correctCasing = user.UserName; 
関連する問題