我正在使用 ASP.NET Core 2.1 Identity。 我已经覆盖了 IdentityUser,因为我需要在用户身上添加一些额外的属性。
在创业中.cs
services.AddDefaultIdentity<PortalUser>().AddEntityFrameworkStores<ApplicationDbContext>();
ApplicationDbContext.cs
public partial class ApplicationDbContext : IdentityDbContext<PortalUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
}
门户用户类
public class PortalUser : IdentityUser
{
[PersonalData]
public DateTime? LastLoginDateUtc { get; set; }
[PersonalData]
public DateTime? RegistrationDateUtc { get; set; }
}
这一切都很好。 我可以通过以下方式添加用户。
_userManager.CreateAsync(user)
但是,当我调用 AddToRolesAsync 向用户添加角色时,我收到异常。 知道为什么吗?
_userManager.AddToRolesAsync(user, new List<string> { roleName });
{System.NotSupportedException: Store does not implement IUserRoleStore<TUser>.
at Microsoft.AspNetCore.Identity.UserManager`1.GetUserRoleStore()
at Microsoft.AspNetCore.Identity.UserManager`1.AddToRolesAsync(TUser user, IEnumerable`1 roles)}
在 Startup.cs 中,我缺少 AddRoles,所以
services.AddDefaultIdentity<PortalUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
应该是
services.AddDefaultIdentity<PortalUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
注意:顺序至关重要。AddRoles
必须先于AddEntityFrameworkStores
由于 asp.net Core 2.2中没有任何关于解决方案的答案,我想分享我在Core2.2中遇到的相同错误asp.net
首先,这是针对asp.net 核心 2.1中相同错误的另一种解决方案 https://github.com/aspnet/AspNetCore.Docs/issues/8683
多亏了作者的想法,当我遵循asp.net 核心 2.2中的官方指导时,我遇到了这个问题(网址在这里:微软文档 对于 asp.net 核心 2.2(。当我完成他说的步骤并尝试运行项目时,它会抛出异常"商店未实现 IUserRoleStore">
问题是:实际上,这是 asp.net 核心 2.1 的示例(我强烈怀疑为什么Microsoft会为用户提供一个没有任何示例代码的文档,这可能没有意义(
你会发现,在Areas/Identity/Data/IdentityHostingStartup.cs IdentityHostingStartup::Configure方法中,你有以下代码:
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
这与您应该在/Program.cs ConfigureService中添加的代码相同,因为步骤:将角色服务添加到文档中提到的身份:
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
因此,如果您在 Core 2.2 中遇到 asp.net 相同的问题,另一种解决方案是:
- 按照 asp.net 2.2 中的文档进行操作
- 当你遇到这一章:为身份添加角色服务时,忽略官方文档去做吧:
替换行
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
跟
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
在 Areas/Identity/Data/IdentityHostingStartup.cs IdentityHostingStartup::Configure方法,但不将其添加到程序中.cs(该文件在 asp.net core 2.2 中无法删除(
我 Asp.net 身份使用的项目稍后将在我的存储库中更新:UWPHelper,祝你好运:)
我知道作者已经解决了他的问题,但是我会为执行上述答案中的所有步骤但仍有此错误的任何其他人添加此内容。
从 Aspnet github
您必须删除自动生成的 IdentityHostingStartup.Areas/Identity/IdentityHostingStartup中的配置方法.cs