In local I need to connect to database using appsettings.json but in other environments like dev,staging and prod need to get connection string for db from azure key vault.In launchsettings.json I have set environment to local and when I run the project in local I am getting error in program.cs as 'The ConfigureServices method must either be parameterless or take only one parameter of type IServiceCollection.'Please let me know what is the issue here or how to fix it
appsettings.json
{
"KeyVault": {
"Vault": "Bookskv"
},
"MongoConnection": {
"ConnectionString": "<set by keyvault>",
"Database": "Books"
},
"MongoLocal": {
"ConnectionString": "mongodb:localhost:1230",
"Database": "Books"
}
}
Program.cs
public static IWebHost CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((ctx, builder) =>
{
var keyName = string.Empty;
if (ctx.HostingEnvironment.EnvironmentName!="Local")
{
var keyVaultEndpoint = GetKeyVaultEndpoint();
if (!string.IsNullOrEmpty(keyVaultEndpoint))
{
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
if(ctx.HostingEnvironment.EnvironmentName=="Development")
{
keyName = "BooksdevDb";
}
else if(ctx.HostingEnvironment.EnvironmentName == "Production")
{
keyName = "BooksprodDb";
}
var secretBundle = keyVaultClient.GetSecretAsync("https://Bookskv.vault.azure.net/secrets/{keyName}").Result;
var secret = secretBundle.Value;
builder.AddAzureKeyVault(
keyVaultEndpoint, keyVaultClient, new DefaultKeyVaultSecretManager());
}
}
}
).UseUrls("http://localhost:44315")
.UseKestrel()
.UseIISIntegration()
.UseIIS()
.UseStartup<Startup>()
.Build();
}
private static string GetKeyVaultEndpoint() => "https://Bookskv.vault.azure.net";
}
Startup.cs
services.Configure<Settings>(options =>
{
if (env.IsDevelopment() || env.IsStaging() || env.IsProduction())
{
options.ConnectionString = Configuration.GetSection("MongoConnection:ConnectionString").Value;
options.Database = Configuration.GetSection("MongoConnection:Database").Value;
}
else
{
options.ConnectionString = Configuration.GetSection("MongoLocal:ConnectionString").Value;
options.Database = Configuration.GetSection("MongoLocal:Database").Value;
}
});
Settings.cs
public class Settings
{
public string ConnectionString;
public string Database;
}