использование пользовательских секретов dotnet для хранения списка строк

Как я могу сохранить это:

"myList" : [ "file", "something" ]

в пользовательских секретах dotnet?

Я могу добавить это в секреты пользователя с помощью команды:

dotnet user-secrets set --id my-id myList "[ \"file\", \"something\" ]"

но он сохраняется в виде строки и не ведет себя так же, как при чтении из appsettings.json.

мне кажется, что секреты пользователей не поддерживают массивы json. это правильно?

1 ответ

Решение

Вы можете напрямую редактировать "пользовательские секреты" вашего проекта. Пользовательские секреты проекта сохраняются в файле "secrets.json". Расположение файла здесь:

  • В Windows: % Appdata% \ Microsoft \ UserSecrets \\ secrets.json

  • В Linux: ~/.microsoft / usersecrets //secrets.json

- это в основном GUID для пользовательских секретов вашего проекта. вы можете увидеть это в файле.csproj следующим образом:

<UserSecretsId>16abe888-53cb-415c-9889-797efe87c422</UserSecretsId>

Вот пример файла secrets.json:

{
"UserSecretsConfig" : {
  "UserName1": "john.doe",
  "Password1": "pppp",
  "Domain": "company.local",
  "Uri": "https://google.com/",
  "ToEmails":["user1@example.com", "user2@example.com", "user3@example.com"]
  }
}

Вот модельный класс для примера пользовательских секретов:

  public class MyUserSecretsConfig
    {
        public string UserName1 { get; set; }
        public string Password1 { get; set; }
        public string Domain { get; set; }
        public string Uri { get; set; }
        public IEnumerable<string> ToEmails { get; set; }
    }

Вот пример кода для чтения "секретов пользователя" в консольном приложении:

 var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddUserSecrets<Program>();

            var config = builder.Build();
            MyUserSecretsConfig mySecrets = config.GetSection("UserSecretsConfig")
                      .Get<MyUserSecretsConfig>();

Чтобы показанный выше код работал, вам необходимо добавить эти пакеты в свой проект:

  • Microsoft.Extensions.Configuration.Binder
  • Microsoft.Extensions.Configuration.UserSecrets

Кроме того, если вы будете получать доступ к секретам пользователя в приложении ASP.NET Core, конфигурация доступна через Injection at Startup class. В ConfigurationBuilder нет необходимости.

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}
Другие вопросы по тегам