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此答案解决了您的问题吗?如果已解决,则将其标记为答案,如果未解决,则详细说明您所面临的问题。不,我没有尝试过这一个…我尝试过我自己的答案…如下所示。