gpt4 book ai didi

c# - Store 没有实现 IUserRoleStore UserManager.GetUserRoleStore() ASP.NET Core MVC 3

转载 作者:行者123 更新时间:2023-12-03 20:27:16 27 4
gpt4 key购买 nike

我已实现 IdentityAsp.Net.Core MVC 3因为我们已经有了要使用的数据库表。调用下面的方法时出现错误,它们都发生在 UserManager 中在对方法的同一调用中。查看此方法的源代码是因为 Store 变量为空。但我不太确定如何确保它不为空。我在网上查看了各种解决方案,但没有一个能解决我的问题。

我的解决方案适用于 SignInManager对于密码,但我无法通过角色错误。

配置服务 方法

public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
options.Filters.Add(new AuthorizeFilter(policy));
options.EnableEndpointRouting = false;
});
services.AddDbContext<EntitiesModel>(options => options.UseSqlServer(
Configuration["Data:ConnectionStrings:XXXXXXXXXXXXX"]));
services.AddIdentity<UserViewModel, UserRoleViewModel>().AddDefaultTokenProviders();
services.AddTransient<IUserStore<UserViewModel>, UserStore>();
services.AddTransient<IRoleStore<UserRoleViewModel>, RoleStore>();
services.ConfigureApplicationCookie(options =>
{
options.Cookie.HttpOnly = true;
options.LoginPath = "/Login";
options.LogoutPath = "/Logout";
});
}

用户商店 类(class)
public class UserStore : IUserStore<UserViewModel>, IUserPasswordStore<UserViewModel>, IUserEmailStore<UserViewModel>, IUserRoleStore<UserRoleViewModel>
{
....

角色存储 类(class)
public class RoleStore : IRoleStore<UserRoleViewModel>,IUserRoleStore<UserRoleViewModel>
{
....

用户 View 模型 类(class)
public class UserViewModel 
{
[Key, Required]
public int Id { get; set; }
[Required, MaxLength(128)]
public string UserName { get; set; }
[Required, MaxLength(1024)]
public string Password { get; set; }
public virtual ICollection<UserRoleViewModel> UserRoles { get; set; }
}

UserRoleViewRoleModel 类(class)
public class UserRoleViewModel 
{
[Key, Required]
public int Id { get; set; }
[Required, ForeignKey(nameof(User))]
public int UserId { get; set; }
[Required, ForeignKey(nameof(Role))]
public int RoleId { get; set; }
public virtual RoleViewModel Role { get; set; }
public virtual UserViewModel User { get; set; }
}

角色 View 模型 类(class)
public class RoleViewModel 
{
[Key,Required]
public int RoleId { get; set; }
[Required]
public string RoleName { get; set; }
public virtual ICollection<UserRoleViewModel> UserRoles { get; set; }
}

**Calling Code**
//this works
var result = await signInManager.PasswordSignInAsync(user.UserName, user.Password, true, false);
//this fails
var test = await userManager.IsInRoleAsync(user, "Management");
//this fails
var roles = await userManager.GetRolesAsync(user);

错误

NotSupportedException: Store does not implement IUserRoleStore. Microsoft.AspNetCore.Identity.UserManager.GetUserRoleStore()



如果我的结构方式不对,请原谅我,但我是来自 ASP.Net Web Forms 的新手

最佳答案

不确定,但您似乎忘记在 start up.cs 文件中添加角色

    services.AddDefaultIdentity<UserViewModel>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<DbContext>();

请找到以下链接以获取更多引用。
http://qaru.site/questions/16512353/store-does-not-implement-iuserrolestoretuser-aspnet-core-21-identity

关于c# - Store 没有实现 IUserRoleStore<TUser> UserManager<TUser>.GetUserRoleStore() ASP.NET Core MVC 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58654400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com