HttpContext.GetOwinContext().GetUserManager <AppRoleManager>()返回null

Jah*_*han 17 c# identity roles owin asp.net-identity

我使用ASP.NET Identity 2来创建角色,但结果HttpContext.GetOwinContext().GetUserManager<AppRoleManager>()为null.

然后我无法创建角色.

我怎么解决这个问题?

public class MVCController : Controller
{
    public MVCController()
    {

    }
    public AppRoleManager RoleManager // returns null ?!
    {
        get
        {
            return HttpContext.GetOwinContext().GetUserManager<AppRoleManager>();
        }
    }
    public User CurrentUser
    {
        get
        {
            string currentUserId = User.Identity.GetUserId();
            User currentUser = DataContextFactory.GetDataContext().Users.FirstOrDefault(x => x.Id.ToString() == currentUserId);
            return currentUser;
        }
    }
    public IAuthenticationManager AuthManager
    {
        get
        {

            return HttpContext.GetOwinContext().Authentication;
        }
    }
    public AppUserManager UserManager
    {
        get
        {
            return HttpContext.GetOwinContext().GetUserManager<AppUserManager>();
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

我的控制器:

public class RoleAdminController : MVCController
{
    [HttpPost]
    public async Task<ActionResult> CreateRole([Required]string name)
    {
        if (ModelState.IsValid)
        {
            if (RoleManager != null) // RoleManager is null, why?!
            {
                IdentityResult result = await RoleManager.CreateAsync(new Role { Name = name });
                if (result.Succeeded)
                {
                    return RedirectToAction("Index");
                }
                else
                {
                    AddErrorsFromResult(result);
                }
            }
        }
        return View(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

AppRoleManager:

public class AppRoleManager : RoleManager<Role, int>, IDisposable
{
    public AppRoleManager(RoleStore<Role, int, UserRole> store)
        : base(store)
    {
    }
    public static AppRoleManager Create(IdentityFactoryOptions<AppRoleManager> options, IOwinContext context)
    {
        return new AppRoleManager(new RoleStore<Role, int, UserRole>(DataContextFactory.GetDataContext()));
    }
}
Run Code Online (Sandbox Code Playgroud)

tra*_*max 33

很可能你错过了给OwinContext创建ApplicationUserManager的方法.
为此,你需要在你的public void Configuration(IAppBuilder app)

app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<AppRoleManager>(AppRoleManager.Create);
Run Code Online (Sandbox Code Playgroud)

这将注册创建UserManagerRoleManager使用的代理,OwinContext然后只能在控制器中调用它们.

  • AppRoleManager不存在 (3认同)
  • 谢谢您的回答. (2认同)