在asp.net成员资格中存储和访问旧版UserID

时间:2012-02-14 21:15:40

标签: asp.net asp.net-membership

我有一个遗留的UserID(int32),我想链接到asp.net会员。我在数据库上设置了链接表,我对这部分感到满意​​。问题是将UserID存储在Web应用程序中的位置,以便在需要时可以轻松访问。

我决定存储它的最佳位置是Login Control的LoggedIn事件中FormsAuthenticationTicket的UserData部分。我第一次尝试使其可访问是在我的BasePage类的PreInit中提取它。这样做的问题是当UserControls需要UserID时它会变得混乱。

将它包装在Utilities类中的静态方法或属性中是否可以接受,如下所示:

    public static int UserID
    {
        get
        {
            int userID = 0;
            if (HttpContext.Current.User.Identity is FormsIdentity)
            {
                FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;
                userID = Int32.Parse(ticket.UserData);
            }
            return userID;
        }
    }

这似乎有效,但我不知道我是否打破了一些不成文的规则。我假设所有这些东西都在内存中,所以这次访问没有很大的开销。

1 个答案:

答案 0 :(得分:3)

从功能的角度看你的代码看起来很好(虽然我会稍微清理一下,但这更像是一种风格)。

您可能会考虑将其作为扩展方法,而不是仅仅将其粘贴到随机实用程序类中。也许是IIdentity类的扩展名?

int myUserId = HttpContext.Current.User.Identity.MyUserId();

我想,使用UserData字段很好。另一个选择是使用自定义IIdentity创建您自己的Ticket对象并将其包装在GenericPrincipal中 - 但是对于您所追求的内容可能过于繁重。