У меня есть старый 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;
}
}
Кажется, это работает, но я не знаю, нарушаю ли я здесь какое-то неписанное правило. Я полагаю, что все это находится в памяти, поэтому в этом доступе нет больших накладных расходов.