Служба для типа «Microsoft.AspNetCore.Identity.RoleManager`1 [Microsoft.AspNetCore.Identity.IdentityRole] не зарегистрирована. - PullRequest
0 голосов
/ 27 февраля 2019

Так что я довольно новичок в 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 сможет мне помочь, заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...