asp.net 核心中 GetUserManager 的替代

Alternate of GetUserManager in asp.net core

我正在将现有的 Asp.net Mvc 项目转换为 .Net Core 现在问题是这个 get 方法

public ApplicationUserManager UserManager
    {
        get
        {



return _userManager ??
HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

        }
        private set
        {
            _userManager = value;
        }
    }

在 Mvc 中,我们可以使用

获取 OwinContext

HttpContext.GetOwinContext().GetUserManager()

但在 .Net Core GetOwinContext 不存在的情况下,当我比较两者的 HttpContext 定义时 类

在 Mvc 的情况下,HttpContextBase 是类型,但在 Core 的情况下,HttpContext 在与 HttpContextBase 相同的命名空间中没有扩展方法,这就是找不到此扩展方法的原因,请告诉我如何在 Core 中执行此操作?

没有替代品。 ASP.NET Core 对几乎所有内容都使用依赖注入。如果你需要 UserManager<TUser>,你可以注入你正在使用的任何 class 的构造函数(控制器等):

public class MyController : Controller
{
    private readonly UserManager<ApplicationUser> _userManager;

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

    ...
}

要从 HttpContext 访问 UserManager,您可以尝试实现如下扩展:

public static class HttpContextExtension
{
    public static UserManager<TUser> GetUserManager<TUser>(this HttpContext context) where TUser: class
    {
        return context.RequestServices.GetRequiredService<UserManager<TUser>>();
    }
}

然后像

一样使用它
public class HomeController : Controller
{        
    public IActionResult Index()
    {
        var userManager = HttpContext.GetUserManager<IdentityUser>();
        return View();
    }       
}