C# 如何获取当前登录的用户详细信息?

C# 如何获取当前登录的用户详细信息?,c#,asp.net-mvc,C#,Asp.net Mvc,我向applicationuser添加了新属性,现在我想检索它 public class ApplicationUser : IdentityUser { [Required] [StringLength(50)] public string FirstName { get; set; } [Required] [StringLength(50)] public string LastName { get; set; } //.... } 我尝试使

我向
applicationuser
添加了新属性,现在我想检索它

public class ApplicationUser : IdentityUser
{
   [Required]
   [StringLength(50)]
   public string FirstName { get; set; }

   [Required]
   [StringLength(50)]
   public string LastName { get; set; }

   //....
}
我尝试使用
User.Identity…
检索,但无法获取姓名


怎么做?我将非常感谢

User.Identity
返回的只是一个抽象的
System.Security.Principal.IIdentity
,它不包含任何自定义属性和
ApplicationUser
实例

其中一个选项是,如果
Startup
类具有
ASP.NET核心标识的配置,则使用可以注入控制器中的:

var user = await _userManager.FindByIdAsync(userId);
它将准确地返回
ApplicationUser
实例

另一个选项是直接从
DbContext
获取用户(默认情况下,其名称为
ApplicationDbContext
。也可以将其注入控制器)


User.Identity
只返回一个抽象
System.Security.Principal.IIdentity
,它不包含任何自定义属性和
ApplicationUser
实例

其中一个选项是,如果
Startup
类具有
ASP.NET核心标识的配置,则使用可以注入控制器中的:

var user = await _userManager.FindByIdAsync(userId);
它将准确地返回
ApplicationUser
实例

另一个选项是直接从
DbContext
获取用户(默认情况下,其名称为
ApplicationDbContext
。也可以将其注入控制器)


我通过以下方式检索了firstName和SecondName:

第1步。

// DbContext.
private readonly ApplicationDbContext _context;

public HomeController()
{
   _context = new ApplicationDbContext();
}
// Getting Id of Current LoggedIn User.
var UserId = User.Identity.GetUserId();
var User = _context.Users.Single(user => user.Id == UserId);
第2步。

// DbContext.
private readonly ApplicationDbContext _context;

public HomeController()
{
   _context = new ApplicationDbContext();
}
// Getting Id of Current LoggedIn User.
var UserId = User.Identity.GetUserId();
var User = _context.Users.Single(user => user.Id == UserId);
第3步。

// DbContext.
private readonly ApplicationDbContext _context;

public HomeController()
{
   _context = new ApplicationDbContext();
}
// Getting Id of Current LoggedIn User.
var UserId = User.Identity.GetUserId();
var User = _context.Users.Single(user => user.Id == UserId);
这些步骤对我有效


我通过以下方式检索了firstName和SecondName:

第1步。

// DbContext.
private readonly ApplicationDbContext _context;

public HomeController()
{
   _context = new ApplicationDbContext();
}
// Getting Id of Current LoggedIn User.
var UserId = User.Identity.GetUserId();
var User = _context.Users.Single(user => user.Id == UserId);
第2步。

// DbContext.
private readonly ApplicationDbContext _context;

public HomeController()
{
   _context = new ApplicationDbContext();
}
// Getting Id of Current LoggedIn User.
var UserId = User.Identity.GetUserId();
var User = _context.Users.Single(user => user.Id == UserId);
第3步。

// DbContext.
private readonly ApplicationDbContext _context;

public HomeController()
{
   _context = new ApplicationDbContext();
}
// Getting Id of Current LoggedIn User.
var UserId = User.Identity.GetUserId();
var User = _context.Users.Single(user => user.Id == UserId);
这些步骤对我有效


可能最好通过ctor注入
ApplicationDbContext
,而不是手动创建。@AlbertK是的,你是对的。但我补充说,因为有些人对这种方法感到困惑,而我就是其中之一。这就是我使用手动方法的原因。好的,但是您还应该在某个地方手动调用
\u context.Dispose()
方法。这可能对性能至关重要。@AlbertK。谢谢。可能最好通过ctor注入
ApplicationDbContext
,而不是手动创建。@AlbertK是的,你是对的。但我补充说,因为有些人对这种方法感到困惑,而我就是其中之一。这就是我使用手动方法的原因。好的,但是您还应该在某个地方手动调用
\u context.Dispose()
方法。这可能对性能至关重要。@AlbertK。谢谢。@RehanShah这个答案解决了你的问题吗?如果已解决,则将其标记为答案,如果未解决,则说明您面临的问题的详细信息。不,我没有尝试过这一个…我尝试了我自己的答案…如下所示。@RehanShah此答案解决了您的问题吗?如果已解决,则将其标记为答案,如果未解决,则详细说明您所面临的问题。不,我没有尝试过这一个…我尝试过我自己的答案…如下所示。