asp.net会员提供者Guid userID

时间:2011-03-27 04:19:32

标签: asp.net

我需要(我认为)获取当前登录的userID,以便我可以更新一个使用此userID作为外键的表。问题是数据库中的userID与此不匹配:

Guid currentUser = (Guid)Membership.GetUser().ProviderUserKey;
currentUser.toString();

结果为dffaca0c-ae0b-8549-8073-1639985740be

而当我查看数据库时,它是0CCAFADF0BAE498580731639985740BE

为什么他们的价值不同? (我只有一个用户)。我正在使用asp.net的oracle数据库和提供程序,但不应该有任何区别。

4 个答案:

答案 0 :(得分:6)

我相信这些是相同的值,但显示顺序不同。看看这两个值:

dffaca0c-ae0b-8549-8073-1639985740be
0CCAFADF-0BAE-4985-8073-1639985740BE

前3个段的字节顺序是不同的顺序:

0CCA FADF => FADF 0CCA => DFFA CA0C == dffaca0c

0BAE => AE 0B == ae0b

4985 => 85 49 == 8549

作为@ x0n评论,这看起来与Oracle的字节顺序不同。根据结构的this description,前8个字节的字节顺序取决于系统,而后8个字节的字节顺序特别是大端字节。

答案 1 :(得分:3)

我遇到了同样的问题并提出了解决问题的方法:

 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;
    }

答案 2 :(得分:0)

或者也可以尝试使用HttpContext.Current.User来获取当前用户?

答案 3 :(得分:0)

您始终可以使用“小写用户名”列创建外键。它总是独一无二的。也许不是最好的选择,但它是最简单的,效果很好。我在几个项目中使用过它。