我正在使用asp。net core 2.0 Identity和我有一个从IdentityRole继承的ApplicationRole类。根据文档,RoleManager为AspNetRoles表管理有关角色的CRUD操作,因此在Startup类中添加了服务:
services.AddIdentity<ApplicationUser, ApplicationRole>()
.AddEntityFrameworkStores<MyDbContext>()
.AddDefaultTokenProviders();
services.AddAuthentication()
在配置方法中:
app.UseAuthentication();
在我的控制器中:
public AdministrationController(
RoleManager<ApplicationRole> roleManager,
ILogger<AccountController> logger,
IStringLocalizer<AccountController> localizer)
{
_roleManager = roleManager;
}
控制器操作:
[HttpPost]
public async Task<JsonResult> Role_Create([DataSourceRequest] DataSourceRequest request, ApplicationRoleViewModel role)
{
if (role != null && ModelState.IsValid)
{
ApplicationRole identityRole = new ApplicationRole();
identityRole.Name = role.Name;
if (await _roleManager.RoleExistsAsync(identityRole.Name))
{
ModelState.AddModelError("Role", "Role already exists");
}
else
{
await _roleManager.CreateAsync(identityRole);
}
}
return Json(new[] { role }.ToDataSourceResult(request, ModelState));
}
[HttpPost]
public async Task<JsonResult> Role_Update([DataSourceRequest] DataSourceRequest request, ApplicationRoleViewModel role)
{
if (role != null && ModelState.IsValid)
{
ApplicationRole identityRole = new ApplicationRole();
identityRole.Id = role.Id;
identityRole.Name = role.Name;
await _roleManager.UpdateAsync(identityRole);
}
return Json(new[] { role }.ToDataSourceResult(request, ModelState));
}
[HttpPost]
public async Task<JsonResult> Role_Delete([DataSourceRequest] DataSourceRequest request, ApplicationRoleViewModel role)
{
if (role != null)
{
ApplicationRole identityRole = new ApplicationRole();
identityRole.Id = role.Id;
identityRole.Name = role.Name;
if (await _roleManager.RoleExistsAsync(identityRole.Name))
{
await _roleManager.DeleteAsync(identityRole);
}
else
{
ModelState.AddModelError("Role", "Role doesn't exist");
}
}
return Json(new[] { role }.ToDataSourceResult(request, ModelState));
}
_角色管理器。CreateAsync方法按预期工作,角色插入到AspNetRoles表中,但是\u roleManager。更新同步和角色管理器。DeleteAsync无法按预期工作,表仍显示相同的行,未更新或删除。
操作前的表行:
更新操作:
删除操作:
操作完成后,表中显示的行与第一个屏幕截图中所示的行相同。假设RoleManager类管理对表的操作。