Так что я довольно новичок в ASP.NET Core, всегда раньше использовал ASP.NET MVC.Теперь я хочу создать роли, которые я могу назначать пользователям.Но это доставляет мне трудные времена, уже пытаясь в течение 2 дней: p Я пробовал различные учебные пособия и руководства, но я не мог заставить его работать.
Для этого я следовал этому уроку:
https://www.c -sharpcorner.com / article / role-base-authorization-in-asp-net-core-2-1 /
Я выполнил все шаги и реализовал ихв мое приложение.Однако это не сработает.Ошибка, которую он мне выдает:
"Нет службы для типа" Microsoft.AspNetCore.Identity.RoleManager`1 [Microsoft.AspNetCore.Identity.IdentityRole] '. "
Iвыяснили, что это как-то связано с методом configureservice и что мне нужно зарегистрировать RoleManager и IdentityRole в методах, так как другие методы не могут распознать эти свойства.
Мой метод ConfigureServices на данный момент:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
//services.AddIdentity<???, IdentityRole>();
//.AddEntityFrameworkStores<IdentityContext>()
//.AddDefaultTokenProviders();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Метод настройки на данный момент:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
CreateRoles(serviceProvider).Wait();
}
И метод CreateRoles, который я использовал из связанного урока выше.
private async Task CreateRoles(IServiceProvider serviceProvider)
{
//initialiseren van custom roles
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
string[] roleNames = { "Admin", "Medewerker" };
IdentityResult roleResult;
foreach (var roleName in roleNames)
{
var roleExist = await RoleManager.RoleExistsAsync(roleName);
if (!roleExist)
{
//create the roles and seed them to the database: Question 1
roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
}
}
//Probeer admin account te vinden
IdentityUser admin = await UserManager.FindByEmailAsync("admin@test.nl");
//Als het admin account nog niet bestaat, maak hem dan aan
if (admin == null)
{
admin = new IdentityUser()
{
UserName = "admin@test.nl",
Email = "admin@test.nl",
};
//2de property is hier het wachtwoord
await UserManager.CreateAsync(admin, "Ex4mple");
}
//Voeg de gebruiker toe aan de desbetreffende
await UserManager.AddToRoleAsync(admin, "Admin");
//Probeer medewerker account te vinden
IdentityUser medewerker = await UserManager.FindByEmailAsync("medewerker@test.nl");
//Als het medewerkers account nog niet bestaat, maak hem dan aan
if (medewerker == null)
{
medewerker = new IdentityUser()
{
UserName = "medewerker@test.nl",
Email = "medewerker@test.nl",
};
//2de property is hier het wachtwoord
await UserManager.CreateAsync(medewerker, "Ex4mple!");
}
//Voeg de gebruiker toe aan de desbetreffende
await UserManager.AddToRoleAsync(medewerker, "Medewerker");
}
Что происходитздесь не так?
Я действительно надеюсь, что кто-то с большим опытом работы с ASP.NET Core сможет мне помочь, заранее спасибо.