Asp.net core ASP.NET标识和User.IsInRole

Asp.net core ASP.NET标识和User.IsInRole,asp.net-core,claims-based-identity,asp.net-identity-2,Asp.net Core,Claims Based Identity,Asp.net Identity 2,我将项目从成员资格提供程序移动到ASP.NET标识,添加了以下角色管理器: public class ApplicationRoleManager : RoleManager<ApplicationRole> { public ApplicationRoleManager(RoleStore<ApplicationRole> store) : base(store) { } public static Applica

我将项目从成员资格提供程序移动到ASP.NET标识,添加了以下角色管理器:

public class ApplicationRoleManager : RoleManager<ApplicationRole>
{
    public ApplicationRoleManager(RoleStore<ApplicationRole> store)
                : base(store)
    { }
    public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options,
                                            IOwinContext context)
    {
        return new ApplicationRoleManager(new
                RoleStore<ApplicationRole>(context.Get<ApplicationDbContext>()));
    }
}

已添加记录,但User.IsInRole不起作用。为什么以及如何修复?

声明和角色不同,请参阅和。您应该使用
AddToRoleAsync
方法,该方法包含在
UserManager
中。这里有一个例子

var user = new ApplicationUser
{
    Username = "Rob@Microsoft.com",
    Email = "Rob@Microsoft.com"
};

var result = await _userManager.CreateAsync(user, "P@ssw0rd");
if (result.Succeeded)
{
    await _userManager.AddToRoleAsync(user, "Admin");
}

最好使用
AddToRoleAsync
方法-它做的事情非常相似,您不必自己做。另外,如果内部实现发生更改,您就不必更新代码

至于
User.IsInRole
不起作用-我怀疑它在您通话后不会立即起作用。但是,如果您注销用户并再次登录,您将看到该角色已就位。这是因为
User.IsInRole
检查cookie,其中as
addclairsync
将声明添加到数据库中。并且cookie不会在每次调用时从DB刷新,因此在查看cookie时,您不会在DB中看到新添加的信息。有很多方法可以迫使这一点,但这是超越这个问题的

var user = new ApplicationUser
{
    Username = "Rob@Microsoft.com",
    Email = "Rob@Microsoft.com"
};

var result = await _userManager.CreateAsync(user, "P@ssw0rd");
if (result.Succeeded)
{
    await _userManager.AddToRoleAsync(user, "Admin");
}