Понимание двоеточия в основных конфигурациях ASP.NET? - PullRequest
0 голосов
/ 09 ноября 2018

Это расстраивает отношения между файлами JSON и конфигурацией в ASP.NET Core. Я установил секрет, как это:

dotnet user-secrets set "Pwd" "123"

Кажется, что нет способа извлечь его с помощью метода IConfiguration.GetSection, можно использовать только IConfiguration.GetValue, мне нужно использовать IConfiguration.GetSection, чтобы связать значение с объектом POCO:

public class AppSecrets
{
    public int Pwd { get; set; }
}

Затем я добавил еще один секрет: "parent:pwd" "456" И посмотрел на автоматически сгенерированный файл JSON, и он выглядит как обычный JSON с двумя ключами:

{
  "Pwd": "123",
  "parent:pwd": "456"
}

так что делает двоеточие особенным для конфигурации в .NET Core. В документах они упомянули:

В предыдущем примере двоеточие означает, что Movies является объектом литерал со свойством ServiceApiKey.

Но в моем примере значение было получено, несмотря на то, что parent не сопоставляется с классом AppSecrets по имени.

Также еще один момент, разочаровывающий меня в том, как значения передаются в аргументы приложения в свойствах проекта, что-то вроде этого:

--user:data:year 1991

можем ли мы передать больше иерархических узлов?

извините за то, что разочаровал вас моим разочарованием Я просто открываю ядро ​​.NET!

1 Ответ

0 голосов
/ 10 ноября 2018

Рассмотрим класс poco для настроек smtp:

public class SmtpOptions
{
   public string Server { get; set; }
   public int Port { get; set; } = 25;
   public string User { get; set; }
   public string Password { get; set; } 
   public string DefaultEmailFromAddress { get; set; }
 }

Вы можете поместить это в appsettings.json так:

{
"SmtpOptions": {
    "Server": "MyServer",
    "Port": "25",
    "User": "MyUser",
    "Password": "MyPassword",
    "DefaultEmailFromAddress": "noreply@mydomain"
    }
  }

Зарегистрируйте это так и теперь, когда poco можно вводить где угодно.

services.Configure<SmtpOptions>(configuration.GetSection("SmtpOptions"));

Если вы хотите сделать это в пользовательских секретах, вам нужно несколько команд и синтаксис двоеточия, например:

dotnet user-secrets set "SmtpOptions:Server" "MyServer"
dotnet user-secrets set "SmtpOptions:Port" "25"
dotnet user-secrets set "SmtpOptions:User" "MyUser"
dotnet user-secrets set "SmtpOptions:Password" "MyPassword"
dotnet user-secrets set "SmtpOptions:DefaultEmailFromAddress" "noreply@mydomain"

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

...