1

次のコードを試しています

aspx:

Username: <br />
<asp:TextBox runat="server" ID="txtUserName"></asp:TextBox>
<br />
Password: <br />
<asp:TextBox runat="server" ID="txtPassword" TextMode="Password"></asp:TextBox>
<br />
<asp:Button runat="server" ID="btnLogin" Text="Login" onclick="btnLogin_Click"/>

コードビハインド:

protected void btnLogin_Click(object sender, EventArgs e)
{
    if(!string.IsNullOrEmpty(txtUserName.Text.Trim()) && !string.IsNullOrEmpty(txtPassword.Text.Trim()))
    {
        string username = txtUserName.Text.Trim();
        string password = txtPassword.Text.Trim();
        if (Membership.ValidateUser(username, password))
        {
            MembershipUser user = Membership.GetUser(username);
            string userid = user.ProviderUserKey.ToString();
        }
 }

ユーザー ID で取得した値は、データベースにある値とは異なります。私は何を間違っていますか。私は試しMembershipUser user = Membership.GetUser()ましたが、nullを返します

注: asp.net メンバーシップが構成された Oracle を使用しています。

編集: データベースのユーザー ID: 161863BC7C244AADBF27F5F6250AF99C

ユーザー ID 変数のユーザー ID: bc631816-247c-ad4a-bf27-f5f6250af99c

4

1 に答える 1

2

コメントで述べたようにOracle、ユーザー GUID を異なる順序で保存しているようです。データベースで同じ GUID を本当に取得したい場合は、回避策が必要です。このコード プロジェクトの記事を確認してください。著者は、方法を使用して guid を翻訳しました。

public static string TranslateOraceEndianUserID() 
    { 
        MembershipUser myObject = Membership.GetUser(); 
        Guid g = new Guid(myObject.ProviderUserKey.ToString()); 
        byte[] b = g.ToByteArray(); 
        string UserID = BitConverter.ToString(b, 0).Replace("-", string.Empty); 
        return UserID; 
    } 

ただし、これはテストされていません。著者は言う

私の問題を解決する次の方法が作成されました

于 2013-02-10T14:35:54.317 に答える