System.InvalidOperationException:方案已存在:Identity.Application

System.InvalidOperationException: Scheme already exists: Identity.Application

我想为用户添加自己的自定义数据,所以我按照这里的教程进行操作:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/add-user-data?view=aspnetcore-2.2&tabs=visual-studio

我已经有一个现有的应用程序,所以我无法逐行遵循该教程(我现有的应用程序已经有一个用户数据库)。当我遇到上述错误时,我并没有走得太远。我使用脚手架尝试添加

System.InvalidOperationException: 方案已经存在: Identity.Application

我已经访问了几个不同的堆栈溢出和 git 页面,例如以下页面,但无济于事

https://github.com/aspnet/AspNetCore.Docs/issues/8223(我认为最相关) https://github.com/aspnet/Security/issues/1412

似乎很多其他人添加了两次调用身份的问题,但我在我的代码中只调用了一次。我还尝试在启动时完全注释掉该行,然后它说定义了 none 并且生我的气。我也试过切换默认值,如下所示。

    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        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.AddIdentity<IdentityUser, IdentityRole>()
       // services.AddDefaultIdentity<IdentityUser>()
            .AddEntityFrameworkStores<WebApp1.Models.WebApp1Context>()
            .AddDefaultTokenProviders();


            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseDatabaseErrorPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseAuthentication();

            app.UseMvc();
        }

我觉得我不应该抛出异常,但是....有什么修复建议吗?

编辑:我在收到此错误之前采取了相关步骤。创建项目内容以使用脚手架进程 creation.override 中的个人用户帐户,并创建一个您可以覆盖的辅助用户模型。迁移和更新数据库 运行.

尝试将您的 IdentityUser class 重命名为与 AspNetIdentity classes 不同的名称。然后确保您继承自 IdentityUser

例如这里是一个class

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public bool IsDisabled { get; set; }
}

这是启动

services.AddIdentity<ApplicationUser, IdentityRole>()
            .AddEntityFrameworkStores<IdentityContext>()
            .AddDefaultTokenProviders();

这个 ASP Identity Core InvalidOperationException 主要是在 Startup.cs 或项目中使用 [=15= 的任何 class 中存在对函数的重复调用时抛出] Identity Core,ASP Identity 在 Startup class:

中工作需要什么
public void ConfigureServices(IServiceCollection services)
{
   _ = services.AddDbContext<ApplicationDbContext>(options =>                
  options.UseSqlServer(Configuration.GetConnectionString("AmpCoreDb")));

   _ = services.AddDefaultIdentity<IdentityUser>(options =>
  options.SignIn.RequireConfirmedAccount = true)
         .AddEntityFrameworkStores<ApplicationDbContext>();

  _ = services.AddScoped<AuthenticationStateProvider, 
  RevalidatingIdentityAuthenticationStateProvider<IdentityUser>>();

  _ = services.AddDatabaseDeveloperPageExceptionFilter();

}

标记的答案不是正确答案。我有同样的问题,原因是当添加所有身份脚手架时(通过 dotnet aspnet-codegenerator 作为 Visual Studio 崩溃),它在 areas/identity 下创建了一个 IdentityHostingStartup class。 class 复制了 startup.cs 中的身份设置。所以删除这个 class 解决了问题。