C# Asp.net核心标识:检查用户是否为cshtml中的管理员

C# Asp.net核心标识:检查用户是否为cshtml中的管理员,c#,asp.net-core,C#,Asp.net Core,我有一个asp.NETCore2.1Identity项目,设置了种子角色“admin”,种子用户“admin”。根据我的数据库,用户admin具有admin角色,但当我这样做时: @User.IsInRole("admin") 无论我是否登录,我都会得到false 我试图寻找一个答案,我发现了以下几点 @Roles.IsUserInRole(User.UserName, "admin") 及 对于第一个,似乎没有定义“角色”,而第二个不起作用。 我做错了什么?我忘了什么吗 我做了更多的研究,

我有一个asp.NETCore2.1Identity项目,设置了种子角色“admin”,种子用户“admin”。根据我的数据库,用户admin具有admin角色,但当我这样做时:

@User.IsInRole("admin")
无论我是否登录,我都会得到false 我试图寻找一个答案,我发现了以下几点

@Roles.IsUserInRole(User.UserName, "admin")

对于第一个,似乎没有定义“角色”,而第二个不起作用。
我做错了什么?我忘了什么吗

我做了更多的研究,似乎更明智的做法是制定政策并使用这些政策而不是角色。所以我需要修改一下我的代码

这是2.1版本中的一个已知问题,在2.2 preview-1中已修复

在asp.net core 2.1中,使用了
AddDefaultIdentity
,注入变为

services.AddDefaultIdentity<IdentityUser>()
        .AddRoles<IdentityRole>()
services.AddDefaultIdentity()
.AddRoles()
,默认情况下不会启用角色,并且对于User.IsInRole,它始终返回false

要了解它,只需使用旧式api,而不是使用新的
AddDefaultIdentity()
来配置标识:

services.AddIdentity<IdentityUser, IdentityRole>()
        .AddRoleManager<RoleManager<IdentityRole>>()
        .AddDefaultUI()
        .AddDefaultTokenProviders()
        .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddIdentity()
.AddRoleManager()
.AddDefaultUI()
.AddDefaultTokenProviders()

.AddEntityFrameworkStores

要使用
@User.IsInRole(“admin”)
您需要在
角色
表中设置一个角色
“admin”
,并且当前用户需要映射到
用户角色
表中的该角色,就像我说的,我检查了数据库,该角色存在,用户被添加到它为什么不使用身份验证方法?我想我也检查过了,但我记不起来了,明天我要检查一下。我转到了保险单和索赔单,但非常感谢+1
services.AddIdentity<IdentityUser, IdentityRole>()
        .AddRoleManager<RoleManager<IdentityRole>>()
        .AddDefaultUI()
        .AddDefaultTokenProviders()
        .AddEntityFrameworkStores<ApplicationDbContext>();