我正在使用ASP.NET Core 2.1身份。我已经覆盖了IdentityUser,因为我需要在用户上添加一些其他属性。
在Startup.cs
services.AddDefaultIdentity<PortalUser>().AddEntityFrameworkStores<ApplicationDbContext>();
ApplicationDbContext.cs
public partial class ApplicationDbContext : IdentityDbContext<PortalUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
}
PortalUser类
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)}
答案 0 :(得分:24)
在Startup.cs中,我缺少AddRoles,所以
services.AddDefaultIdentity<PortalUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
应该是
services.AddDefaultIdentity<PortalUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
注意:顺序很关键。 AddRoles
必须先于AddEntityFrameworkStores
答案 1 :(得分:0)
我知道作者已经解决了他的问题,但是我将为执行上述答案中所有步骤并且仍然有此错误的任何人添加此问题。
您必须在 Areas / Identity / IdentityHostingStartup.cs
中删除自动生成的IdentityHostingStartup.Configure方法。答案 2 :(得分:0)
由于 asp.net Core 2.2 中没有关于该解决方案的任何答案,我想与我在 asp.net Core 2.2 中遇到的相同错误共享< / p>
首先,这是针对 asp.net core 2.1 中相同错误的另一种解决方案 https://github.com/aspnet/AspNetCore.Docs/issues/8683
并且由于作者的想法,当我遵循 asp.net core 2.2 中的官方指南(网址在MicrosoftDocs For asp.net core 2.2中)时,我遇到了问题。当我说完步骤并尝试运行项目时,它会引发异常“存储未实现IUserRoleStore”
问题是:实际上,这是asp.net core 2.1的示例(而且我强烈怀疑,为什么Microsoft将为用户提供文档中没有任何示例代码的文档,这可能没有道理)
>您会发现,在 Areas / Identity / Data / IdentityHostingStartup.cs IdentityHostingStartup :: Configure方法中,您具有以下代码:
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
与您应在步骤 /Program.cs ConfigureService 中添加的代码相同:在提到的文档中为Identity添加角色服务:
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
因此,如果您在asp.net core 2.2中遇到相同的问题,另一种解决方案是:
替换行
services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<ApplicationDbContext>();
使用
services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();
在 Areas / Identity / Data / IdentityHostingStartup.cs IdentityHostingStartup :: Configure 方法中,但不能将其添加到program.cs中(该文件不能在asp.net core 2.2中删除) / p>
我使用Asp.net Identity的项目稍后会在我的存储库中更新:UWPHelper,祝您好运:)