Как получить текущего пользователя и как использовать class User в MVC5?

  • Как я могу получить идентификатор текущего зарегистрированного пользователя в MVC 5 ? Я попробовал предложения StackOverflow, но они, похоже, не для MVC 5.
  • Кроме того, какова наилучшая практика MVC 5 для назначения пользователям данных? (например, User должен иметь Items . Должен ли я хранить Id пользователя в Id ? Могу ли я расширить class User с помощью свойства навигации « List ?

Я использую «Индивидуальные учетные записи пользователей» из шаблона MVC.

Пробовал эти:

  • Как получить текущего пользователя в приложении MVC?
  • Как получить текущего пользователя в ASP.NET MVC
  • Войдите в систему с идентификатором пользователя – это вызывает следующее:

‘Членство.GetUser ()’ равно null.

Если вы кодируете в ASP.NET MVC Controller, используйте

 using Microsoft.AspNet.Identity; ... User.Identity.GetUserId(); 

Стоит упомянуть, что User.Identity.IsAuthenticated и User.Identity.Name будут работать без добавления вышеупомянутого оператора using . Но GetUserId() не будет присутствовать без него.

Если вы находитесь в classе, отличном от controllerа, используйте

 HttpContext.Current.User.Identity.GetUserId(); 

В шаблоне MVC 5 по умолчанию идентификатор пользователя – это идентификатор GUID, который хранится в виде строки.

Пока нет лучшей практики, но нашел полезную информацию о расширении профиля пользователя:

Попробуйте что-нибудь вроде:

 var store = new UserStore(new ApplicationDbContext()); var userManager = new UserManager(store); ApplicationUser user = userManager.FindByNameAsync(User.Identity.Name).Result; 

Работает с RTM.

Если вы хотите, чтобы объект ApplicationUser в одной строке кода (если у вас установлена ​​последняя идентификатор ASP.NET), попробуйте:

 ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId()); 

Вам понадобятся следующие операторы:

 using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; 

Получение идентификатора довольно прямолинейно, и вы решили это.

Ваш второй вопрос, хотя и немного больше связан.

Итак, сейчас все это относится к материалам предварительной проверки, но общая проблема, с которой вы сталкиваетесь, – это то, где вы расширяете пользователя новыми свойствами (или коллекцией Items в вашем вопросе).

Из коробки вы получите файл под названием IdentityModel в папке «Модели» (на момент написания). Там у вас есть пара classов; ApplicationUser и ApplicationDbContext . Чтобы добавить свою коллекцию Items вы захотите изменить class ApplicationUser , как если бы это был обычный class, который вы использовали с Entity Framework. На самом деле, если вы быстро посмотрите под капотом, вы обнаружите, что все classы, связанные с идентификацией (User, Role и т. Д.), Являются всего лишь POCOs теперь с соответствующими аннотациями данных, поэтому они хорошо играют с EF6.

Затем вам нужно внести некоторые изменения в конструктор AccountController чтобы он знал, использовать ваш DbContext.

 public AccountController() { IdentityManager = new AuthenticationIdentityManager( new IdentityStore(new ApplicationDbContext())); } 

Теперь получение всего пользовательского объекта для вашего зарегистрированного пользователя является немного эзотерическим, если честно.

  var userWithItems = (ApplicationUser)await IdentityManager.Store.Users .FindAsync(User.Identity.GetUserId(), CancellationToken.None); 

Эта строка выполнит работу, и вы сможете получить доступ к userWithItems.Items как вы хотите.

НТН

Я чувствую твою боль, я пытаюсь сделать то же самое. В моем случае я просто хочу очистить пользователя.

Я создал class базового controllerа, который наследует все мои controllerы. В нем я переопределяю OnAuthentication и устанавливаю для filterContext.HttpContext.User to null

Это лучшее, что мне удалось сделать далеко …

 public abstract class ApplicationController : Controller { ... protected override void OnAuthentication(AuthenticationContext filterContext) { base.OnAuthentication(filterContext); if ( ... ) { // You may find that modifying the // filterContext.HttpContext.User // here works as desired. // In my case I just set it to null filterContext.HttpContext.User = null; } } ... } 
  • Moq + Unit Testing - System.Reflection.TargetParameterCountException: несоответствие счетчика параметров
  • UWP Включить петлю локальной сети
  • Как сравнить объект Color и получить ближайший цвет в цвете ?
  • Как связать вложенные ViewModels с View на Controller в MVC3?
  • Некоторые помогают понять «доходность»,
  • Что такое символ без знака?
  • Что делает InitializeComponent () и как он работает в WPF?
  • Используется для нескольких уровней разметки указателя?
  • Нет вывода на консоль из приложения WPF?
  • OpenCv 2.3 C - Как изолировать объект внутри изображения
  • Можете ли вы сохранить StreamReader от использования базового streamа?
  • Давайте будем гением компьютера.