Можно ли добавить в IConfiguration после запуска WebHost? - PullRequest
1 голос
/ 31 мая 2019

Я использую хранилище параметров AWS Systems Manager для хранения строк подключения к базе данных, которые используются для динамического создания DbContext в моем приложении .NET Core

Я использую поставщик конфигурации .NET Core AWS (с https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/), который вводит мои параметры в конфигурацию IConfiguration во время выполнения.

В настоящий момент мне необходимо сохранить свой ключ доступа / секретный ключ AWS в коде, чтобы он мог быть доступен для ConfigurationBuilder, но он хотел бы переместить этоиз базы кода и сохранил его в appsettings или подобном.

Вот мой метод для создания построителя веб-хоста, вызываемого при запуске

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

    AWSCredentials credentials = new BasicAWSCredentials("xxxx", "xxxx");

    AWSOptions options = new AWSOptions()
    {
        Credentials = credentials,
        Region = Amazon.RegionEndpoint.USEast2
    };

    webHost.ConfigureAppConfiguration(config =>
    {
        config.AddJsonFile("appsettings.json");
        config.AddSystemsManager("/ParameterPath", options, reloadAfter: new System.TimeSpan(0, 1, 0)); // Reload every minute
    });

 return webHost;
}

Мне нужно иметь возможность ввести параметр BasicAWSCredentialsоткуда-то.

1 Ответ

1 голос
/ 31 мая 2019

Вам необходимо получить доступ к уже созданной конфигурации, чтобы иметь возможность получать информацию, которую вы ищете.

Рассмотрите возможность создания конфигурации для получения необходимых учетных данных

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

    var configuration = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .Build();

    var access_key = configuration.GetValue<string>("access_key:path_here");
    var secret_key = configuration.GetValue<string>("secret_key:path_here");

    AWSCredentials credentials = new BasicAWSCredentials(access_key, secret_key);

    AWSOptions options = new AWSOptions() {
        Credentials = credentials,
        Region = Amazon.RegionEndpoint.USEast2
    };

    webHost.ConfigureAppConfiguration(config => {
        config.AddJsonFile("appsettings.json");
        config.AddSystemsManager("/ParameterPath", options, reloadAfter: new System.TimeSpan(0, 1, 0)); // Reload every minute
    });

    return webHost;
}

Я бы также предложил рассмотреть Настройка учетных данных AWS из документов для использования SDK для поиска возможного альтернативного способа хранения и получения учетных данных.

...