Сервер идентификации 4 Asp.Net Идентификатор ядро EF не заполняется

#c# #asp.net-core #identityserver4

#c# #asp.net-core #identityserver4

Вопрос:

Я в основном следовал всему руководству с нуля, не считая пропуска javascript-клиента. Тем не менее, я скопировал некоторый код из примера Asp.Net Identity EF Core объединены, и база данных со всеми таблицами была создана успешно. Однако, когда я запускаю сервер идентификации, нет начального значения. Я отлаживал program.cs, и начальный параметр всегда равен false, что делает его пропускающим начальное условие.

 public class Program
{
    public static void Main(string[] args)
    {
        var seed = args.Any(x => x == "/seed");
        if (seed) args = args.Except(new[] { "/seed" }).ToArray();

        var host = CreateWebHostBuilder(args).Build();

        if (seed)
        {
            using (var scope = host.Services.GetRequiredService<IServiceScopeFactory>().CreateScope())
            {
                SeedData.EnsureSeedData(scope.ServiceProvider);
                return;
            }
        }

        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}
  

это начальный класс данных, такой же, как в примере

  public class SeedData
{
    public static void EnsureSeedData(IServiceProvider provider)
    {
        provider.GetRequiredService<ApplicationDbContext>().Database.Migrate();
        provider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();
        provider.GetRequiredService<ConfigurationDbContext>().Database.Migrate();

        {
            var userMgr = provider.GetRequiredService<UserManager<ApplicationUser>>();
            var alice = userMgr.FindByNameAsync("alice").Resu<
            if (alice== null)
            {
                alice = new ApplicationUser
                {
                    UserName = "alice"
                };
                var result = userMgr.CreateAsync(alice, "Pass123$").Result
                if (!result.Succeeded)
                {
                    throw new Exception(result.Errors.First().Description);
                }

                alice = userMgr.FindByNameAsync("alice").Resu<

                result = userMgr.AddClaimsAsync(user, new Claim[]{
                            new Claim(JwtClaimTypes.Subject, "1"),
                            new Claim(JwtClaimTypes.Name, "Alice Smith"),
                            new Claim(JwtClaimTypes.GivenName, "Alice"),
                            new Claim(JwtClaimTypes.FamilyName, "Smith"),
                              new Claim(JwtClaimTypes.Email, "AliceSmith@email.com"),
                            new Claim(JwtClaimTypes.EmailVerified, "true", ClaimValueTypes.Boolean),
                            new Claim(JwtClaimTypes.Role, "Admin")                                
                        }).Resu<
                if (!result.Succeeded)
                {
                    throw new Exception(result.Errors.First().Description);
                }
                Console.WriteLine("user created");
            }
            else
            {
                Console.WriteLine("user already exists");
            }                
        }

        {
            var context = provider.GetRequiredService<ConfigurationDbContext>();
            if (!context.Clients.Any())
            {
                foreach (var client in Config.GetClients())
                {
                    context.Clients.Add(client.ToEntity());
                }
                context.SaveChanges();
            }

            if (!context.IdentityResources.Any())
            {
                foreach (var resource in Config.GetIdentityResources())
                {
                    context.IdentityResources.Add(resource.ToEntity());
                }
                context.SaveChanges();
            }

            if (!context.ApiResources.Any())
            {
                foreach (var resource in Config.GetApis())
                {
                    context.ApiResources.Add(resource.ToEntity());
                }
                context.SaveChanges();
            }
        }
    }
}
  

чего я не понимаю? Весь код одинаков, класс запуска тоже и т.д…

Комментарии:

1. dotnet запускает program.cs /seed

Ответ №1:

Для прохождения string[] args вам нужно запустить project с помощью Project.exe вместо IIS Express .

Следуйте свойствам проекта-> Отладка-> Аргументы приложения-> /seed -> Запустить проект из ProjectName .

В общем, вы можете рассмотреть возможность принятия решения о заполнении данных путем проверки наличия каких-либо данных в базе данных, а не из аргументов команды.