Ответ 1
GetUserId()
- это метод расширения на IIdentity
, и он находится в Microsoft.AspNet.Identity.IdentityExtensions
. Убедитесь, что вы добавили пространство имен с помощью using Microsoft.AspNet.Identity;
.
Я просто переключился на использование новой версии 2.0 Identity Framework. В 1.0 я мог получить пользовательский объект, используя manager.FindByIdAsync(User.Identity.GetUserId())
. Метод GetUserId()
, похоже, не существует в 2.0.
Теперь все, что я могу понять, это использовать manager.FindByEmailAsync(User.Identity.Name)
, который ссылается на поле username в таблице users. В моем приложении это установлено так же, как поле электронной почты.
Я вижу, что это вызывает проблемы, когда кто-то нуждается в обновлении своей электронной почты. Есть ли способ получить текущий зарегистрированный пользовательский объект на основе неизменяемого значения (например, поля id) в Framework Identity 2.0?
GetUserId()
- это метод расширения на IIdentity
, и он находится в Microsoft.AspNet.Identity.IdentityExtensions
. Убедитесь, что вы добавили пространство имен с помощью using Microsoft.AspNet.Identity;
.
Чтобы получить CurrentUserId в Asp.net Identity 2.0, сначала импортируйте Microsoft.AspNet.Identity
:
С#
using Microsoft.AspNet.Identity;
VB.NET:
Imports Microsoft.AspNet.Identity
А затем вызовите User.Identity.GetUserId()
везде, где хотите:
strCurrentUserId = User.Identity.GetUserId()
Этот метод возвращает текущий идентификатор пользователя как определенный тип данных для userid в базе данных (по умолчанию это String
).
На всякий случай, когда вы похожи на меня, а поле идентификатора объекта пользователя - это Int или что-то другое, кроме строки,
using Microsoft.AspNet.Identity;
int userId = User.Identity.GetUserId<int>();
выполнит трюк
Я была такая же проблема. В настоящее время я использую Asp.net Core 2.2. Я решил эту проблему с помощью следующего фрагмента кода.
using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
Я надеюсь, что это будет кому-то полезно.