Я делал это раньше с использованием MVC5, User.Identity.GetUserId()
но здесь это не работает. User.Identity
Оленья кожа имеет GetUserId()
метод
Я использую Microsoft.AspNet.Identity
Я делал это раньше с использованием MVC5, User.Identity.GetUserId()
но здесь это не работает. User.Identity
Оленья кожа имеет GetUserId()
метод
Я использую Microsoft.AspNet.Identity
System.Web.HttpContext.Current.User.Identity.Name
?Ответы:
Обновление в основной версии ASP.NET> = 2.0
В контроллере:
В каком-то другом классе:
Тогда вы должны зарегистрироваться
IHttpContextAccessor
вStartup
классе следующим образом:Для большей читабельности напишите методы расширения следующим образом:
Затем используйте следующее:
источник
null
.User.Identity.Name
, это может быть потому, что включена анонимная аутентификация. Я смогUser.Identity.Name
вернуть свой домен и имя пользователя, расширивProperties > launchSettings.json
и настроивanonymousAuthentication
доfalse
иwindowsAuthentication
доtrue
.До ASP.NET Core 1.0 RC1 :
Это User.GetUserId () из пространства имен System.Security.Claims .
Начиная с ASP.NET Core 1.0 RC2 :
Теперь вы должны использовать UserManager . Вы можете создать метод для получения текущего пользователя:
И получить информацию о пользователе с объектом:
Примечание. Вы можете сделать это без использования метода, пишущего одинарными строками
string mail = (await _userManager.GetUserAsync(HttpContext.User))?.Email
, но это не соответствует принципу единой ответственности. Лучше изолировать способ, которым вы получаете пользователя, потому что, если когда-нибудь вы решите изменить свою систему управления пользователями, например, использовать другое решение, чем Identity, это станет болезненным, поскольку вам придется просматривать весь код.источник
вы можете получить его в своем контроллере:
или напишите метод расширения, как раньше .Core v1.0
и получить везде, где доступен пользователь ClaimsPrincipal :
источник
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
Convert.ToInt32(User.FindFirstValue(ClaimTypes.NameIdentifier))
чтобы получить целочисленный UserIdЯ включил использование System.Security.Claims, и я мог получить доступ к методу расширения GetUserId ()
NB. Я уже использовал Microsoft.AspNet.Identity, но не смог получить метод расширения. Так что я думаю, что оба они должны использоваться в сочетании друг с другом
РЕДАКТИРОВАТЬ : Этот ответ сейчас устарел. Посмотрите на ответ Сорена или Адриена, чтобы узнать, как это сделать в CORE 1.0.
источник
var userId = User.GetUserId();
Только для .NET Core 2.0 Для получения идентификатора пользователя вошедшего в систему пользователя в
Controller
классе требуется следующее :или
например
источник
Как указано где-то в этом посте, метод GetUserId () был перемещен в UserManager.
Если вы запустили пустой проект, вам может понадобиться добавить UserManger к вашим сервисам в startup.cs. В противном случае это уже должно быть.
источник
Вы должны импортировать Microsoft.AspNetCore.Identity & System.Security.Claims
источник
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
кUser.FindFirstValue(ClaimTypes.NameIdentifier);
?Хотя ответ Адриен верен, вы можете сделать все это в одной строке. Нет необходимости в дополнительных функциях или беспорядке.
Это работает, я проверил это в ASP.NET Core 1.0
тогда вы можете получить другие свойства переменной, как
user.Email
. Я надеюсь, что это поможет кому-то.источник
Для ASP.NET Core 2.0, Entity Framework Core 2.0, API-интерфейс AspNetCore.Identity 2.0 ( https://github.com/kkagill/ContosoUniversity-Backend ):
Id
Было измененоUser.Identity.Name
Отклик:
источник
this.User.Identity.Name
как правило, имя пользователя. В моем тесте имя пользователя - это электронное письмо, будь то пользователь, который вошел в систему после регистрации или вошел в систему с внешнего входа (например, Facebook, Google). Следующий код возвращает идентификатор пользователя. Я использую автоинкрементный первичный ключ для моей идентификационной пользовательской таблицы, следовательно, int.Parse.int userId = int.Parse(this.User.FindFirstValue(ClaimTypes.NameIdentifier));
FindByIdAsync
не работает, поскольку вы предоставляете имя пользователя. Это работает, когда вы замените егоFindByNameAsync
.в
APiController
Примерно так вы получите претензии
источник
User.Identity.GetUserId ();
не существует в ядре идентичности asp.net 2.0. В связи с этим мне удалось по-другому. я создал общий класс для использования всего приложения, потому что получаю информацию о пользователе.
создать общий класс PCommon и интерфейс IPCommon, добавив ссылку
using System.Security.Claims
Здесь реализация общего класса
получить идентификатор пользователя и имя в действии вставки
Спасибо Максуд
источник
Для получения текущего идентификатора пользователя в бритвенных представлениях мы можем внедрить UserManager в представление следующим образом:
Я надеюсь, что вы найдете это полезным.
источник
использовать можно использовать
по какой-то причине NameIdentifier теперь получает имя пользователя (.net core 2.2)
источник
Как администратор, работающий над профилем других людей, и вам необходимо получить идентификатор профиля, над которым вы работаете, вы можете использовать ViewBag для захвата идентификатора, например ViewBag.UserId = userId; userId - это строковый параметр метода, с которым вы работаете.
источник
Если вы хотите это в ASP.NET MVC Controller, используйте
Вам нужно добавить
using
заявление, потомуGetUserId()
что без него не будет.источник
User.GetUserId()
а неUser.Identity.GetUserId()