Хранение и доступ к старому UserID в членстве asp.net - PullRequest
1 голос
/ 15 февраля 2012

У меня есть старый UserID (int32), который я хочу связать с членством asp.net. Я установил таблицы ссылок в базе данных, и я доволен этой частью. Вопрос в том, где хранить идентификатор пользователя в веб-приложении, чтобы он был легко доступен при необходимости.

Я решил, что лучше всего его хранить в части UserData FormsAuthenticationTicket в событии LoggedIn элемента управления Login. Моя первая попытка сделать это доступным было извлечь его в PreInit моего класса BasePage. Проблема в том, что он становится беспорядочным, когда 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 Ответ

3 голосов
/ 15 февраля 2012

Ваш код выглядит нормально с функциональной точки зрения (хотя я бы немного его очистил, но это скорее стиль).

Вы могли бы рассмотреть возможность сделать его методом расширения, а не просто придерживаться его.это в случайном служебном классе.Может быть, расширение для класса IIdentity?

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

Использование поля UserData вполне нормально.Другой вариант - создать свой собственный объект IIdentity с пользовательским Ticket и обернуть их в GenericPrincipal - однако, это может быть слишком большой работой для того, что вам нужно.

...