如何获得当前用户在asp.net核心
我想获取当前用户获取电子邮件等用户的信息。 但我不能这样做在asp.net核心。我很困惑这是我的代码。
HttpContext
在控制器的构造函数中几乎为null。 在每次操作中获取用户并不好。我想获取一次用户信息,并将其设置为ViewData
;
public DashboardController() { var user = HttpContext.User.GetUserId(); }
User.FindFirst(ClaimTypes.NameIdentifier).Value
编辑构造函数
下面的代码工作:
public Controller(IHttpContextAccessor httpContextAccessor) { var userId = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value }
编辑RTM
你应该注册IHttpContextAccessor
:
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); }
在Asp.NET Core中有另一种获取当前用户的方法 – 我想我在这里看到了它在SO ^^上的地方
// Stores UserManager private readonly UserManager<ApplicationUser> _manager; // Inject UserManager using dependency injection. // Works only if you choose "Individual user accounts" during project creation. public DemoController(UserManager<ApplicationUser> manager) { _manager = manager; } // You can also just take part after return and use it in async methods. private async Task<ApplicationUser> GetCurrentUser() { return await _manager.GetUserAsync(HttpContext.User); } // Generic demo method. public async Task DemoMethod() { var user = await GetUserAsync(); string userEmail = user.Email; // Here you gets user email string userId = user.Id; }
该代码发送到名为DemoController的控制器。 如果没有等待(不会编译);)
简单的方法,工作,我检查。
var user = await _userManager.GetUserAsync(HttpContext.User);
那么你可以像user.Email
这个variables的所有属性。 我希望这会帮助别人。
从现在(2017年4月)可以看出,以下工作:
public string LoggedInUser => User.Identity;
至less在一个Controller
- System.DateTime.Now和System.DateTime.Today之间的区别
- build立失败。 错误:“path”不能是空string(“”)或以空字符开始
- Json.NET序列化具有根名称的对象
- 我应该使用哪种dependency injection工具?
- 为什么C#multidimensional array不能实现IEnumerable <T>?
- Math.Pow()如何在.NET Framework中实现?
- “System.Int32”types的expression式不能用于返回types“System.Object”
- C#线性代数库
- IEnumerable Count()和Length之间的区别