在ASP.NET Core 2中获取用户ID

时间:2018-08-09 11:00:31

标签: asp.net-mvc asp.net-core-2.1

我正在尝试获取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)

&这就是我所需要的

3 个答案:

答案 0 :(得分:10)

User.Identity.GetUserId()的旧方法已不存在,但是ID可以作为对您的委托人User的声明。您可以通过多种方法进行操作:

  1. 第一个也是最简单的方法就是提出声明:

    var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
    
  2. 如果您已经有UserManager<TUser>的实例(或想要注入一个实例),则可以在其上使用GetUserId()方法:

    var userId = _userManager.GetUserId(User);
    
  3. 最后,如果您想恢复原来的样子,就像在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将为您提供当前登录用户的电子邮件地址。

我希望这对某人有用。