在Asp.Net MVC 5中获取login用户的用户名

我是相对较新的ASP.Net MVC,现在尝试使用内置的用户loginfunction。 我可以在注册视图中注册一个用户。 如果我尝试使用创build的用户login,这也可以。 我被redirect到主页面。

但我无法获得当前用户的用户名。 我在HomeController和AccountController中尝试了我的代码,但都没有工作。 第一行中的语句总是返回null。

var userID = User.Identity.GetUserId(); if (!string.IsNullOrEmpty(userID)) { var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(ApplicationDbContext.Create())); var currentUser = manager.FindById(User.Identity.GetUserId()); } 

在获取用户ID之前,我还需要做些什么吗?

答案就在你的代码中。 这是什么回报?

 var userID = User.Identity.GetUserId(); 

如果您使用的是ASP.NET Identity,那么login(并redirect到另一个页面)后, IPrincipal.IIdentity应该是ClaimsIdentity 。 你可以试试这个:

 var claimsIdentity = User.Identity as ClaimsIdentity; if (claimsIdentity != null) { // the principal identity is a claims identity. // now we need to find the NameIdentifier claim var userIdClaim = claimsIdentity.Claims .FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier); if (userIdClaim != null) { var userIdValue = userIdClaim.Value; } } 

上面的代码块并不完全是,但本质上是IIdentity.GetUserId扩展方法。

如果这些都不起作用,那么用户可能还没有真正login到您的网站。 login后,您必须redirect到另一个页面,然后服务器才会将身份validationCookie写入浏览器。 这个cookie必须在User.Identity 在后续请求中包含所有这些声明信息(包括NameIdentifier )之前写入。