【问题标题】:InvalidOperationException: Scheme already exists: Identity.ApplicationInvalidOperationException:方案已存在:Identity.Application
【发布时间】:2021-06-21 04:16:07
【问题描述】:

我已经尝试了this question 中的解决方案,但没有任何运气。

在我的Startup.cs 我有这个:

services.AddDbContext<ApplicationDbContext>(options => 
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

//services.AddIdentity<ApplicationUser, ApplicationRole>(options => options.SignIn.RequireConfirmedAccount = true)
//    .AddRoles<ApplicationRole>()
//    .AddEntityFrameworkStores<ApplicationDbContext>();
services.AddIdentity<ApplicationUser, ApplicationRole>()
    .AddRoles<ApplicationRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

services.Configure<IdentityOptions>(options =>
{
    options.SignIn.RequireConfirmedAccount = true;
    options.Password.RequiredLength = 8;
    options.Password.RequireDigit = false;
    options.Password.RequireUppercase = false;
    options.Password.RequireNonAlphanumeric = false;
    options.Password.RequiredUniqueChars = 5;
    options.Lockout.MaxFailedAccessAttempts = 3;
    options.Lockout.DefaultLockoutTimeSpan = new TimeSpan(0, 15, 0); // 15 minutes
});

我尝试从我的解决方案中删除文件 IdentityHostingStartup.cs,但这并没有任何区别。现在我已将其添加回来(在区域/身份/页面中),但注释掉了我认为造成问题的原因:

//[assembly: HostingStartup(typeof(MyAppName.Areas.Identity.IdentityHostingStartup))]
namespace MyAppName.Areas.Identity
{
    public class IdentityHostingStartup : IHostingStartup
    {
        public void Configure(IWebHostBuilder builder)
        {
            //builder.ConfigureServices((context, services) => {
            //    services.AddDbContext<ApplicationDbContext>(options =>
            //        options.UseSqlServer(
            //            context.Configuration.GetConnectionString("GroupManagerContextConnection")));

            //services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
            //    .AddEntityFrameworkStores<ApplicationDbContext>();
            //});
        }
    }
}

【问题讨论】:

  • 确保您的 ApplicationDbContext 类似于ApplicationDbContext:IdentityDbContext&lt;ApplicationUser, ApplicationRole, string&gt;。 ApplicationUser 也应该继承 IdentityUser 和 ApplicationRole 继承 IdentityRole。

标签: c# asp.net-core asp.net-core-identity


【解决方案1】:

这个 ASP Identity Core InvalidOperationException 主要是在 Startup.cs 中存在对函数的重复调用时抛出的。现在请查看您的代码services.AddIdentity&lt;ApplicationUser, ApplicationRole&gt;() .AddRoles&lt;ApplicationRole&gt;() 我认为您在这里调用了角色两次。因为您发现了这个异常。您应该使用:-

services.AddIdentity<ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores<ApplicationDbContext>();
            

或者

services.AddIdentity<ApplicationUser>()
    .AddRoles<ApplicationRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

所以,上面我描述了你的主要问题。

现在你可以试试这样的:-

public class ApplicationUser : IdentityUser
{
    //clarify code
}

Startup.cs

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

【讨论】:

  • 谢谢!事实证明,我实际上确实在我的Startup.cs 更远的地方再次致电AddIdentity... 愚蠢的错误。
  • @Stian 欢迎 :)
猜你喜欢
  • 2018-12-12
  • 2023-04-07
  • 2019-09-20
  • 2019-01-17
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多