Хорошо, так что это кажется общей потребностью. Маленький поисковик находит много способов сделать это. Меня интересует самый правильный способ "mvc correct".
В верхнем правом углу моего приложения есть приветствие, в котором говорится Hello FirstName LastName
. Теперь довольно легко получить имя пользователя зарегистрированного пользователя через IPrincipal
(aka User.Identity.Name
). Однако это не даст мне первое и последнее имя пользователя. Я должен ударить по API членства, чтобы получить это.
Уступка API членства имеет свои недостатки. Он попадает в базу данных каждый раз, что добавляет дополнительный доступ к каждой доступной странице. Достаточно легко установить некоторые переменные сеанса при входе в систему, но это работает только для этого сеанса. Если пользователь нажимает кнопку "Запомнить меня", то в следующий раз вход в систему не будет выполняться, и мне придется загрузить эти значения.
- Я мог бы создать свой собственный членский провайдер, чтобы сделать некоторое кэширование, но это большая работа для более или менее единой цели.
- Я мог бы использовать
Application_AuthenticateRequest
и ударить членство api и сохранить значения в переменных сеанса или что-то подобное. Это нормально, но кажется немного грубой силой. - Я могу зарегистрировать глобальный фильтр и обработать OnAuthenticate, по существу делая то же самое. Это кажется немного лучше, но я не знаю, как это повлияет.
- Я мог бы получить базовый контроллер и просто добавить свойства для предоставления этой информации. Это кажется немного "старой школой", и мне не нравится создавать базовый класс для одной цели.
- Я могу создать статический метод кэширования, который получит информацию о первом доступе. Это в основном не намного лучше, чем синглтон.
- Я мог бы также создать свой собственный IPrincipal, но это означает, что каждый раз бросать его на данные, и это кажется неуклюжим. Я мог бы обернуть это в другом классе, чтобы упростить его, но все же...
- Я могу хранить данные в cookie проверки подлинности форм и получать их оттуда. Там есть некоторые инструменты, чтобы сделать это проще.
Есть ли какие-то методы, о которых я не думал? И каков самый "правильный mvc" способ сделать это?