- Как я могу получить идентификатор текущего пользователя, вошедшего в систему в MVC 5 ? Я попробовал предложения StackOverflow, но они, похоже, не для MVC 5.
- Кроме того, какова наилучшая практика MVC 5 при назначении материала пользователям? (например,
User
должен иметьItems
. Должен ли я хранить пользовательскиеId
вItem
? Могу ли я расширитьUser
класс с помощьюList<Item>
свойства навигации?
Я использую "Индивидуальные учетные записи пользователей" из шаблона MVC.
Пробовал эти:
- Как получить текущего пользователя в приложении MVC?
- Как получить текущего пользователя в ASP.NET MVC
- Войдите в систему под идентификатором пользователя - это бросает следующее:
'Membership.GetUser ()' является нулевым.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Адам Сзабо
источник
источник
HttpContext.Current.User.Identity.Name
Имя зарегистрированного пользователя.Item
он создает, но не на основе имени пользователя (это может измениться). Это не работает из-за того, что `HttpContext.Current 'System.Web.HttpContextBase' не содержит определения для 'Current', и нет никакого метода расширения 'Current', принимающего первый аргумент типа 'System.Web.HttpContextBase' ( вам не хватает директивы using или ссылки на сборку?) `. Вы уверены, что ваше решение для MVC 5?Ответы:
Если вы пишете в ASP.NET MVC Controller, используйте
Стоит упомянуть, что
User.Identity.IsAuthenticated
иUser.Identity.Name
будет работать без добавления вышеупомянутогоusing
утверждения. Но безGetUserId()
этого не будет.Если вы находитесь в классе, отличном от контроллера, используйте
В шаблоне MVC 5 по умолчанию идентификатор пользователя - это GUID, хранящийся в виде строки.
Пока не рекомендуется, но нашел полезную информацию о расширении профиля пользователя:
Identity
: https://devblogs.microsoft.com/aspnet/introduction-asp-net-identity-a-membership-system-for-asp-net-applications/источник
GetUserId
это метод расширения, который хранится в нижней частиAss_Start\IdentityConfig.cs
, где бы вам ни понадобилось его использовать, если он находится в другом пространстве имен, вам нужно установить,using Microsoft.AspNet.Identity
чтобы расширение стало видимым.Попробуйте что-то вроде:
Работает с RTM.
источник
Если вы хотите, чтобы объект ApplicationUser был в одной строке кода (если у вас установлена последняя версия ASP.NET Identity), попробуйте:
Вам понадобится следующее использование операторов:
источник
Получение идентификатора довольно просто, и вы решили это.
Ваш второй вопрос, хотя и немного сложнее.
Итак, все это предварительные выпуски прямо сейчас, но общая проблема, с которой вы сталкиваетесь, это когда вы расширяете пользователя новыми свойствами (или коллекцией Предметов в вашем вопросе).
Из коробки вы получите файл, который называется
IdentityModel
в папке Models (на момент написания). Там у вас есть пара классов;ApplicationUser
иApplicationDbContext
. Чтобы добавить свою коллекцию,Items
вы захотите изменитьApplicationUser
класс, как если бы это был обычный класс, который вы использовали с Entity Framework. Фактически, если вы быстро загляните внутрь, вы обнаружите, что все классы, связанные с идентификацией (Пользователь, Роль и т. Д.), Теперь просто POCO с соответствующими аннотациями данных, поэтому они отлично работают с EF6.Затем вам нужно внести некоторые изменения в
AccountController
конструктор, чтобы он знал, как использовать ваш DbContext.Теперь, если честно, получение всего пользовательского объекта для вашего вошедшего в систему пользователя немного эзотерично.
Эта линия сделает работу, и вы сможете получить доступ,
userWithItems.Items
как вы хотите.НТН
источник
AccountController
?Я чувствую твою боль, я пытаюсь сделать то же самое. В моем случае я просто хочу очистить пользователя.
Я создал базовый класс контроллеров, от которого наследуются все мои контроллеры. В нем я переопределяю
OnAuthentication
и устанавливаюfilterContext.HttpContext.User to null
Это лучшее, что мне удалось далеко ...
источник
источник
если у кого-то еще есть такая ситуация: я создаю подтверждение по электронной почте, чтобы войти в мое приложение, чтобы мои пользователи еще не вошли в систему, однако я использовал нижеприведенное, чтобы проверить наличие электронного адреса, введенного при входе в систему, которое является вариантом решения @firecape
Вам также понадобится следующее:
и
источник
В .Net MVC5 core 2.2 я использую HttpContext.User.Identity.Name. Это сработало для меня.
источник
Вот как я получил AspNetUser Id и отобразил его на своей домашней странице
Я поместил следующий код в метод HomeController Index ()
На странице просмотра просто позвоните
Запустите проект, и вы сможете увидеть свой идентификатор пользователя
источник