Произошла ошибка при запуске приложения. InvalidOperationException: схема уже существует: Identity.Application - PullRequest
0 голосов
/ 02 мая 2019

Произошла ошибка при запуске приложения.
InvalidOperationException: схема уже существует: Identity.Application Microsoft.AspNetCore.Authentication.AuthenticationOptions.AddScheme (имя строки, действие configureBuilder)

Я работаю над ASP.NET Core WEB API с шаблоном Angular в VS 2017. У меня следующий код в методе ConfigureServices () класса Statrtup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<AuthDbContext>(options =>
    {
        options.UseSqlServer(Configuration.GetConnectionString("AuthDbContextConnection"));
    });

    services.AddDbContext<AppNgDbContext>(options =>
    {
        options.UseSqlServer(Configuration.GetConnectionString("AppNgDbContextConnection"));
    });

    services.AddTransient<SecurityService>();

    services.AddIdentity<IdentityUser, IdentityRole>()
            .AddEntityFrameworkStores<AuthDbContext>()
            .AddDefaultTokenProviders();

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                // 1. Load the JST Secret Key to Verify and Validate Token
                // read key from appsettings.json
                var secretKey = Convert.FromBase64String(Configuration["JWTAppSettings:SecretKey"]);
                // 2. Defining the Mechanism for Validating Received Token from Client
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer = false,
                    ValidateAudience = false,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(secretKey)
                };
            });

    services.AddScoped<IRepository<Orders, int>, OrdersRepository>();

    services.AddMvc()
            .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    // In production, the Angular files will be served from this directory
    services.AddSpaStaticFiles(configuration =>
    {
        configuration.RootPath = "ClientApp/dist";
    });
}

Когда я запускаю приложение, оно должно загружаться, чтобы я мог получить доступ к WEB API, но, к сожалению, выдает следующую ошибку

Произошла ошибка при запуске приложения.
InvalidOperationException: схема уже существует: Identity.Application Microsoft.AspNetCore.Authentication.AuthenticationOptions.AddScheme (имя строки, действие configureBuilder)
InvalidOperationException: схема уже существует: Identity.Application Microsoft.AspNetCore.Authentication.AuthenticationOptions.AddScheme (имя строки, действие configureBuilder) Microsoft.AspNetCore.Authentication.AuthenticationBuilder + <> c__DisplayClass4_0.b__0 (AuthenticationOptions o) Microsoft.Extensions.Options.ConfigureNamedOptions.Configure (имя строки, параметры TOptions) Microsoft.Extensions.Options.OptionsFactory.Create (имя строки) Microsoft.Extensions.Options.OptionsManager + <> c__DisplayClass5_0.b__0 () System.Lazy.ViaFactory (режим LazyThreadSafetyMode) System.Lazy.ExecutionAndPublication (LazyHelper executeAndPublication, bool useDefaultConstructor) System.Lazy.CreateValue () Microsoft.Extensions.Options.OptionsCache.GetOrAdd (имя строки, Func createOptions) Microsoft.Extensions.Options.OptionsManager.Get (имя строки) Microsoft.Extensions.Options.OptionsManager.get_Value () Microsoft.AspNetCore.Authentication.AuthenticationSchemeProvider..ctor (параметры IOptions, схемы IDictionary) Microsoft.AspNetCore.Authentication.AuthenticationSchemeProvider..ctor (параметры IOptions) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor (ConstructorCallSite constructorCallSite, область действия ServiceProviderEngineScope) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor.VisitCallSite (IServiceCallSite callSite, аргумент TArgument) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped (ScopedCallSite scopedCallSite, область действия ServiceProviderEngineScope) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton (SingletonCallSite singletonCallSite, область действия ServiceProviderEngineScope) Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor.VisitCallSite (IServiceCallSite callSite, аргумент TArgument) Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine + <> c__DisplayClass1_0.b__0 (область действия ServiceProviderEngineScope) Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService (Тип serviceType, ServiceProviderEngineScope serviceProviderEngineScope) Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService (Тип serviceType) Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService (Тип serviceType) Microsoft.Extensions.Internal.ActivatorUtilities + ConstructorMatcher.CreateInstance (поставщик IServiceProvider) Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance (поставщик IServiceProvider, тип instanceType, параметры объекта []) Microsoft.AspNetCore.Builder.UseMiddlewareExtensions + <> c__DisplayClass4_0.b__0 (RequestDelegate далее) Microsoft.AspNetCore.Builder.Internal.ApplicationBuilder.Build () Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication ()

1 Ответ

0 голосов
/ 02 мая 2019

После некоторых попыток я обнаружил, что следующие строки работают для меня

  services.AddIdentityCore<IdentityUser>().AddRoles<IdentityRole>()
            .AddEntityFrameworkStores<AuthDbContext>()
            .AddDefaultTokenProviders();

Я добавил это вместо следующего кода

services.AddIdentity<IdentityUser, IdentityRole>()

.AddEntityFrameworkStores () .AddDefaultTokenProviders ();

Это работает для меня после использования всего 5-6 часов.

Спасибо, Махеш Сабнис

...