我正在尝试获取ASP.NET Core 2.1 MVC项目中的用户ID。
但是,我只能收到电子邮件。我几乎可以肯定必须有一种1/2线的方式来获取它(在ASP.NET MVC成员资格中,它只是var loggingInUserId = User.Identity.GetUserId();
到目前为止,我一直这样尝试:
var loggedInUserId = User.Identity.ToString(); // Result = Name (E-mail)
// var loggedInUserId = User.Identity.Name; // Result (E-mail)
&这就是我所需要的
答案 0 :(得分:10)
User.Identity.GetUserId()
的旧方法已不存在,但是ID可以作为对您的委托人User
的声明。您可以通过多种方法进行操作:
第一个也是最简单的方法就是提出声明:
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
如果您已经有UserManager<TUser>
的实例(或想要注入一个实例),则可以在其上使用GetUserId()
方法:
var userId = _userManager.GetUserId(User);
最后,如果您想恢复原来的样子,就像在ClaimsPrincipal
上添加扩展名并利用上面的第一种方法一样简单:
public static class ClaimsPrincipalExtensions
{
public static string GetUserId(this ClaimsPrincipal principal) =>
principal.FindFirstValue(ClaimTypes.NameIdentifier);
}
答案 1 :(得分:2)
您需要在控制器中注入依赖项,如下所示:
[Authorize]
public class AccountController: Controller
{
private readonly UserManager<IdentityUser> _userManager;
public AccountController(UserManager<IdentityUser> userManager)
{
_userManager = userManager;
}
}
现在,您可以在控制器内部的任何位置使用以下代码来获取用户详细信息。
var user = await _userManager.FindByEmailAsync(model.EmailID);
现在,您可以使用user.Id来获取userId。
答案 2 :(得分:0)
在Asp.net Core 2.2中,我用下面的代码解决了这个问题。
using Microsoft.AspNetCore.Identity;
var user = await _userManager.FindByEmailAsync(User.Identity.Name);
这样,您将通过他的电子邮件获得用户信息。 User.Identity.Name
将为您提供当前登录用户的电子邮件地址。
我希望这对某人有用。