.Net Core 2.1 не читает секреты пользователя

2

Я запускаю приложение .net core 2.1 на Mac и пытаюсь получить доступ к строке подключения, которая должна быть переопределена моими пользовательскими секретами. Файл .csproj содержит руководство

<UserSecretsId>{{Secret Guid}}</UserSecretsId>

Добавьте секретные ключи пользователя

dotnet user-secrets set "ConnectionStrings:DefaultConnection" "Secret Connection String"

Я создаю конфигурацию, которая отлично читает мой файл appsettings.json, однако она не заменяет значения по умолчанию значениями из моих пользовательских секретов.

// this is done so I build my configurations in a class library
var assembly = AppDomain.CurrentDomain.GetAssemblies()
    .Single(o => o.EntryPoint != null);

var configurationBuilder = new ConfigurationBuilder()
    .AddEnvironmentVariables()
    // .AddUserSecrets<Program>() -> This does not work either
    .AddUserSecrets(assembly, optional: false);

configurationBuilder.SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
var configuration = configurationBuilder.Build();

Console.WriteLine(configuration["ConnectionStrings:DefaultConnection"]);

Как я уже говорил ранее, пытаясь получить доступ к значениям, он не заменяет значения значениями пользовательских секретов. Пожалуйста, дайте мне знать, что мне не хватает.

Теги:
asp.net-core
asp.net-core-2.1

1 ответ

6
Лучший ответ

Порядок добавления источников конфигурации в ConfigurationBuilder является критическим - те, которые добавляются позже, переопределяют те, которые были добавлены первыми. В вашем примере вы вызываете AddUserSecrets перед AddJsonFile, в результате чего значения вашего файла JSON переопределяют значения, определенные в ваших пользовательских секретах.

Для полноты здесь фиксированная версия:

var configurationBuilder = new ConfigurationBuilder()
    .AddEnvironmentVariables();

configurationBuilder.SetBasePath(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
configurationBuilder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

// configurationBuilder.AddUserSecrets<Program>(); -> This does not work either
configurationBuilder.AddUserSecrets(assembly, optional: false);

В свете этого вы также можете переместить вызов AddEnvironmentVariables чтобы он выполнялся позже в настройке конфигурации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню