C# Blazor-Identity在应用程序启动时添加角色

C# Blazor-Identity在应用程序启动时添加角色,c#,asp.net-core,blazor,C#,Asp.net Core,Blazor,我在Blazor.NET3.1中启动了一个应用程序,但我遇到了一个问题。我想在启动应用程序时添加一个具有管理员角色(root)的用户。我正在使用EF。添加用户是可行的,但添加角色会引发异常 我尝试过不同的解决方案,例如,但我仍然有相同的例外,在SQLite、SQL Server 我创建了一个静态类,并在Startup.cs中调用此方法 public static class RolesData { private static readonly string[] Roles = new

我在Blazor.NET3.1中启动了一个应用程序,但我遇到了一个问题。我想在启动应用程序时添加一个具有管理员角色(root)的用户。我正在使用EF。添加用户是可行的,但添加角色会引发异常

我尝试过不同的解决方案,例如,但我仍然有相同的例外,在SQLite、SQL Server

我创建了一个静态类,并在Startup.cs中调用此方法

public static class RolesData
{
    private static readonly string[] Roles = new string[] { "Admin", "Manager", "Member" };

    public static async Task SeedRoles(IServiceProvider serviceProvider)
    {
        using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
        {
            var roleManager = serviceScope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();
            foreach (var role in Roles)
            {
                if (!await roleManager.RoleExistsAsync(role))
                {
                    await roleManager.CreateAsync(new IdentityRole(role));
                }
            }
        }
    }
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    RolesData.SeedRoles(app.ApplicationServices).Wait();
}
公共静态类角色数据
{
私有静态只读字符串[]角色=新字符串[]{“Admin”、“Manager”、“Member”};
公共静态异步任务种子角色(IServiceProvider服务提供程序)
{
使用(var serviceScope=serviceProvider.GetRequiredService().CreateScope())
{
var roleManager=serviceScope.ServiceProvider.GetRequiredService();
foreach(角色中的var角色)
{
if(!wait roleManager.RoleExistsAsync(角色))
{
等待roleManager.CreateAsync(新的IdentityRole(角色));
}
}
}
}
}
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境)
{
...
RolesData.SeedRoles(app.ApplicationServices.Wait();
}
如果你有任何我感兴趣的建议,而且如果你知道一个网站解释身份验证,我想了解

感谢您的帮助

请参阅我的《关于使用
IEntityTypeConfiguration在ASP.NET Core(适用于3.1)中植入各种数据的介绍》

我还没有在blazor上试用过,但我认为它可能值得一试

注意:更改需要数据库迁移。

请参阅我的《关于在ASP.NET Core(适用于3.1版)中使用
IEntityTypeConfiguration播种各种数据的说明》

我还没有在blazor上试用过,但我认为它可能值得一试


注意:更改需要数据库迁移。

由于出现错误,您似乎尚未将Identity server配置为公开角色

例如在Startup.cs中

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddRoles<IdentityRole>()  // <------
                .AddEntityFrameworkStores<ApplicationDbContext>();
并认为:

<AuthorizeView Roles="Administrator">
    Only Administrators can see this.<br />
</AuthorizeView>
<AuthorizeView Roles="Moderator">
    Only Moderators can see this.<br />
</AuthorizeView>
<AuthorizeView Roles="Moderator,Administrator">
    Administrators and Moderators can see this.
</AuthorizeView>

由于出现错误,您似乎没有将Identity server配置为公开角色

例如在Startup.cs中

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddRoles<IdentityRole>()  // <------
                .AddEntityFrameworkStores<ApplicationDbContext>();
并认为:

<AuthorizeView Roles="Administrator">
    Only Administrators can see this.<br />
</AuthorizeView>
<AuthorizeView Roles="Moderator">
    Only Moderators can see this.<br />
</AuthorizeView>
<AuthorizeView Roles="Moderator,Administrator">
    Administrators and Moderators can see this.
</AuthorizeView>

分享您的身材配置服务方法分享您的身材配置服务方法谢谢!当它工作时,我喜欢感觉到心脏的轻微疼痛;)断链兄弟!“提交”@LukeVincent修复了谢谢。这是一个更新的repo.net 5.0,非常感谢你,布莱恩!!在你出现之前,我一直在谷歌上搜索这个身份,结果一无所获!现在我的项目可以全速进行了!另外,我的网络应用程序是Net5.0,所以这是一个双赢的局面。谢谢!当它工作时,我喜欢感觉到心脏的轻微疼痛;)断链兄弟!“提交”@LukeVincent修复了谢谢。这是一个更新的repo.net 5.0,非常感谢你,布莱恩!!在你出现之前,我一直在谷歌上搜索这个身份,结果一无所获!现在我的项目可以全速进行了!另外,我的web应用程序是net 5.0,所以这是一个双赢的局面。我启动了一个测试项目来测试您的解决方案。我启动了一个测试项目来测试您的解决方案。