【问题标题】:How can I get current user ID using IHttpContextAccessor?如何使用 IHttpContextAccessor 获取当前用户 ID?
【发布时间】:2020-10-05 19:47:51
【问题描述】:

我目前正在使用 .NET Core,并且正在尝试获取当前用户 ID。我知道System.Web 在 NET Core 中不可用,所以我尝试使用IHttpContextAccessor

我也将此添加到我的Startup.csservice.AddHttpContextAccessor()

然后我尝试通过在我的控制器中执行此操作来查找用户 ID:

public Controller(IHttpContextAccessor httpContextAccessor){
     var userId = httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier)
}

但它总是返回null,有谁知道为什么并且能够提供建议?我还禁用了anonymousAuthentication 并将windowsAuthentication 设置为true。

编辑

我对@9​​87654328@ 所做的唯一更改是在ConfigureServices 方法中。

public void ConfigureServices(IServiceCollection services)
{
   services.AddControllersWithViews();
   services.AddAuthentication(IISDefaults.AuthenticationScheme);
   services.AddHttpContextAccessor();
}

【问题讨论】:

    标签: asp.net asp.net-mvc authentication .net-core httpcontext


    【解决方案1】:

    实际上有一种更好的方法可以从声明中获取 Id:

    您可以使用ControllerBase.User 属性,但首先,请确保您的控制器是从 Controller 或 ControllerBase 派生的(最后一个不支持视图)。

    使用以下代码 sn -p 获取 ASPNET ID

    string currentUser = _http.HttpContext.User.Claims.ToList().Find(r => r.Type == "id").Value;
    

    【讨论】:

      【解决方案2】:

      您确定需要IHttpContextAccessor

      实际上有一种更好的方法可以从声明中获取 Id:

      您可以使用ControllerBase.User 属性,但首先要确保您的控制器派生自ControllerControllerBase(最后一个不支持视图)。

      public class YourController : Controller
          {
          ...
      
          var id = User.FindFirstValue(ClaimTypes.NameIdentifier)
      
          ...   
          }
      
      

      【讨论】:

      • 您好,感谢您的回复!我已经尝试过您建议的方法,但是,我的 var id 为空。知道为什么吗?
      • @CodeName 您是否设置好身份验证和授权?你能分享你的startup.cs吗?您确定该用户有声明吗?
      • 是的,当我执行User.Identity.Name 时,它确实显示了我的 PC 用户名。稍等,让我添加我的Startup.cs 代码。
      • @CodeName 似乎您使用 Windows 身份验证,因此您可以检查 IdentityUser 并查看您对 NameIdentifier 没有要求。阅读此article,您可以在此处找到您可以从User 获得您的身份验证类型的声明
      猜你喜欢
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 2013-11-22
      相关资源
      最近更新 更多