c# – ASP标识角色不存在错误

c# – ASP标识角色不存在错误,第1张

概述我正在尝试在我的MVC .NET CORE应用程序中创建一个页面,用户可以在其中更改其他用户的角色.此时视图和模型绑定都很有效,但是当实际尝试将角色保存回数据库时,我收到一条错误消息,指出角色不存在.我的方法是: >从模型中获取角色列表. >删除指定用户的现有角色. >使用模型中的列表添加角色. >如果出现错误,请在事务中执行此 *** 作. 我在控制器中的代码如下: var user = await _ 我正在尝试在我的MVC .NET CORE应用程序中创建一个页面,用户可以在其中更改其他用户的角色.此时视图和模型绑定都很有效,但是当实际尝试将角色保存回数据库时,我收到一条错误消息,指出角色不存在.我的方法是:

>从模型中获取角色列表.
>删除指定用户的现有角色.
>使用模型中的列表添加角色.
>如果出现错误,请在事务中执行此 *** 作.

我在控制器中的代码如下:

var user = await _userManager.FindByIDAsync(ID);                if (user == null)                {                    return VIEw("Error");                }                using (_context.Database.BeginTransaction())                {                    var removeResult = await _userManager.RemoveFromrolesAsync(user,await _userManager.GetRolesAsync(user));                    if (!removeResult.Succeeded)                    {                        return VIEw("Error");                    }                    var addResult = await _userManager.AddToRolesAsync(user,model.MemberRoles);                    if (!addResult.Succeeded)                    {                        return VIEw("Error");                    }                }

其中model.MemberRoles为List< string>角色.奇怪的是,这个过程在_userManager.RemoveFromrolesAsync上失败,即使我将用户的现有角色直接传递给函数.我试过抛弃UserManager类并使用ef,但没有运气.我还验证了模型中的角色与数据库中的角色匹配.是否有任何明显错误会导致失败?谢谢.

编辑

这是我遇到的错误:

InvalIDOperationException: Role adminISTRATOR does not exist.Microsoft.AspNetCore.IDentity.EntityFrameworkCore.UserStore`4.<AddToRoleAsync>d__32.MoveNext()--- End of stack trace from prevIoUs location where exception was thrown ---

以下是我的数据库中定义的角色:

解决方法 当您尝试将用户添加到角色时,它首先尝试查找角色.在sql Profiler中,您可以看到它实际上是通过normalizedname字段而不是name字段进行搜索.

exec sp_executesql N'SELECT top(2) [r].[ID],[r].[ConcurrencyStamp],[r].[name],[r].[normalizedname]FROM [AspNetRoles] AS [r]WHERE [r].[normalizedname] = @__normalizedRolename_0',N'@__normalizedRolename_0 nvarchar(256)',@__normalizedRolename_0=N'adminISTRATOR'

解决方案是在创建角色时将normalizedname字段设置为name字段的大写:

所以在SeedData类中:

/* Create Roles */IEnumerable<UserRole> allRoles = Enum.GetValues(typeof(UserRole)).Cast<UserRole>();foreach (UserRole role in allRoles){     if (!await roleManager.RoleExistsAsync(role.ToString()))     {                await roleManager.CreateAsync(new IDentityRole {                           name = role.ToString(),normalizedname = role.ToString().toupper()                         });     }}
总结

以上是内存溢出为你收集整理的c# – ASP标识角色不存在错误全部内容,希望文章能够帮你解决c# – ASP标识角色不存在错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1220111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存