【问题标题】:Get current ApplicationUser from class in ASP.NET MVC从 ASP.NET MVC 中的类获取当前 ApplicationUser
【发布时间】:2018-10-30 16:10:33
【问题描述】:

我正在尝试从一个类中获取当前登录的 ApplicationUser 的信息。

我能够在这样的控制器中实现这一点:

private readonly UserManager<ApplicationUser> _userManager;

public AccountController(UserManager<ApplicationUser> _userManager)
{
    _userManager = userManager;
}

private Task<ApplicationUser> GetCurrentUserAsync() => _userManager.GetUserAsync(HttpContext.User);

但是,当我在课堂上尝试此操作时,_usermanagerHttpContext 均出现错误,提示需要对象引用。

我试过了,但是,我似乎无法使用这种方法访问用户的信息。任何帮助将不胜感激。

var contextAccessor = services.GetRequiredService<IHttpContextAccessor>();
var user = contextAccessor.HttpContext.User;

【问题讨论】:

  • 在服务类中这样做是否一定合适?理论上,该服务可以在不同用户帐户下的不同机器上执行。您不应该在控制器中获取用户 ID 并将其传递给服务吗?
  • @jmcilhinney 抱歉,这不是服务类。我对 ASP.NET 很陌生,术语有误。
  • 我有一个带有 GetCart 方法的 ShoppingCart 类,我试图在 Startup.cs 中将其配置为服务,所以我认为在我的情况下使用控制器不会起作用

标签: c# asp.net asp.net-mvc authentication asp.net-core


【解决方案1】:

您的控制器的用户属性提供对用户主体对象的直接访问。即 System.Security.Principal.IPrincial。

this.User;

this.User.Identity 提供该用户的身份,这可能来自您的身份验证别名身份提供者。

【讨论】:

    【解决方案2】:
    HttpContext.Current.User.Identity.GetUserId()
    

    【讨论】:

      猜你喜欢
      • 2014-01-22
      • 2015-03-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 1970-01-01
      • 1970-01-01
      • 2016-04-30
      相关资源
      最近更新 更多