Получить идентификатор пользователя с идентификатором имени пользователя 2.0
MVC 5 с идентификатором asp.net 2.0
Я понимаю, как получить текущий идентификатор пользователя. Мне нужно получить идентификатор пользователя другого пользователя в системе. Как это делается?
Ex. Мне нужно получить идентификатор пользователя из имен пользователей "fsmith"...
Ответы
Ответ 1
Внутри AccountController вы можете вызвать следующий метод, чтобы получить объект пользователя, а затем получить идентификатор пользователя.
var user = await UserManager.FindByNameAsync(userName);
var userId = user.Id;
Если вы не находитесь в AccountController, вы можете получить ссылку UserManager, используя следующий код
var UserManager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
Ответ 2
Добавить в Шаши полезный ответ...
Если вы находитесь внутри контроллера учетной записи, вы можете использовать существующий UserManager:
var user = await UserManager.FindByNameAsync(userName);
var userId = user.Id;
В других контроллерах (и, возможно, выберите другие места, где доступен HttpContext), вы создаете User Manager с:
var um = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
Но мне потребовалось некоторое время, чтобы понять, что вы можете получить его почти где угодно с этим последним бит. Например, я использовал его в методе seed (в Configuration.cs), чтобы я мог засеять свойство User другой модели:
var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(*insert-your-db-context-here*));
Ответ 3
Один из способов - использовать метод FindByNameAsync вашего пользовательского менеджера (или его общую версию). Он принимает имя пользователя (в вашем случае "fsmith") и возвращает задачу пользовательского объекта. Этот пользовательский объект содержит всю информацию об этом пользователе.
Фрагмент кода может выглядеть примерно так: (если вы ищете идентификатор базы данных):
var user = await UserManager.FindByNameAsync("fsmith");
var userId = user.Id;
РЕДАКТИРОВАТЬ
Экземпляр UserManager обычно объявляется следующим образом (помните, что существует много способов его объявления, например, при использовании Dependency Injection):
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
public UserManager<ApplicationUser> UserManager { get; private set; }
Ответ 4
Если вы используете Bearen Token Auth, приведенный выше пример не возвращает пользователя приложения.
Вместо этого используйте это:
ClaimsPrincipal currentUser = this.User;
var currentUserName = currentUser.FindFirst(ClaimTypes.NameIdentifier).Value;
ApplicationUser user = await _userManager.FindByNameAsync(currentUserName);
return user.Id;
Это работает в apsnetcore 2.0. Не пытались в более ранних версиях.