Я работаю над проектом ASP.Net vNext/MVC6. Я получаю доступ к идентификатору ASP.Net.
Класс ApplicationUser
, по-видимому, там, где я должен добавить любые дополнительные пользовательские свойства, и это работает с Entity Framework, и мои дополнительные свойства будут храниться в базе данных, как ожидалось.
Однако проблема возникает, когда я хочу получить доступ к деталям текущего пользователя в моих представлениях. В частности, у меня есть _loginPartial.cshtml
, в котором я хочу получить и отобразить значок пользователя Gravatar, для которого мне нужен адрес электронной почты.
Базовый класс Razor View
имеет свойство User, которое является ClaimsPrincipal
. Как мне перейти от этого свойства User
к моему ApplicationUser
, чтобы получить мои пользовательские свойства?
Обратите внимание, что я не спрашиваю, как найти информацию; Я знаю, как искать ApplicationUser
из значения User.GetUserId()
. Это больше вопрос о том, как разумно подойти к этой проблеме. В частности, я не хочу:
- Выполните любой поиск базы данных из моих представлений (разделение проблем)
- Необходимо добавить логику для каждого контроллера, чтобы получить текущие данные пользователя (принцип DRY)
- Необходимо добавить свойство User для каждого ViewModel.
Это похоже на "сквозную проблему", которая должна иметь централизованное стандартное решение, но я чувствую, что мне не хватает части головоломки. Каков наилучший способ получить эти пользовательские свойства из представлений?
Примечание. Кажется, что команда MVC пошарила эту проблему в шаблонах проекта, гарантируя, что свойство UserName всегда настроено на адрес электронной почты пользователя, аккуратно избегая необходимости выполнять этот поиск, чтобы получить пользователя адрес электронной почты! Мне кажется, что это немного обманщик, и в моем решении имя пользователя входа может быть или не быть их адресом электронной почты, поэтому я не могу полагаться на этот трюк (и я подозреваю, что будут другие свойства, которые мне нужны для доступа позже).