如何在非控制器类中从Microsoft.AspNetCore.Identity获取UserID

本文关键字:AspNetCore Microsoft Identity 获取 UserID 控制器 | 更新日期: 2023-09-27 18:17:48

希望有人能帮帮我。我是新的ASP, MVC和c#,但试图建立一个web应用程序来学习它。我已经创建了一个默认的应用程序,它为用户创建了所有的控制器,视图等,一切都运行良好。

我现在已经创建了一个类,并且在该类中,我需要获得登录用户的userID或用户名。我试过将UserManager和SignInManager注入到类的构造函数中,但随后任何调用该调用的控制器都抱怨我没有传递所需的参数。

这可能有点厚颜无耻,但如果有人有一个如何从类中检索userID之类的基本示例,我可能会向后工作并理解发生了什么。我在网上搜索了几个小时,但找不到任何可行的例子。

使用VS 2015 Asp Core Net RC2

谢谢

如何在非控制器类中从Microsoft.AspNetCore.Identity获取UserID

用户id已在HttpContext中存在。Identity只是添加了帮助程序,但您仍然需要HttpContext实例,而在控制器之外则没有。这似乎是XY问题的一个主要例子,在这个问题中,你问的是如何用你已经决定的某种方法来解决问题,而不是问如何解决问题本身。一般来说,如果您需要控制器外部的用户id,您应该简单地将字面用户id从控制器传递给您正在调用的任何对象,而不是尝试从那里检索它。

这工作我

查看本文的Inside Services一节,了解如何获取HttpContextAccessor的实例(例如_httpContextAccessor)

那么你可以像这样得到用户id:

long userId = ClaimsPrincipalExtensions.GetUserId(_httpContextAccessor.HttpContext.User);

假设您已经编写了ClaimsPrincipalExtensions方法。GetUserId,如果没有,就检查这个