web-dev-qa-db-fra.com

Comment remplacer un paramètre de tableau de configuration ASP.NET Core à l'aide de variables d'environnement

LT; DR

Dans une application ASP.NET Core, j'ai un appsettings.json fichier de configuration qui utilise un tableau JSON pour configurer une collection de paramètres.

Comment remplacer un paramètre d'un des objets du tableau à l'aide de variables d'environnement?

Contexte

J'utilise serilog dans une application principale ASP.NET et j'utilise Serilog.Settings.Configuration , pour lui permettre d'être configuré à l'aide de appsettings.json.

La configuration est comme ceci:

{
  "Serilog": {
    "Using":  ["Serilog.Sinks.Literate"],
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "File", "Args": { "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt" } }
    ],
    "Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"],
    "Properties": {
        "Application": "Sample"
    }
  }
}

Une fois déployé, je souhaite remplacer certains paramètres, par exemple le MinimumLevel, et le chemin d'accès au fichier journal. Mon option préférée est de le faire via des variables d'environnement lors du déploiement sur un Azure App Service, donc j'utiliserai les paramètres de l'application via le portail de gestion Azure (ceux-ci sont réalisés en tant que variables d'environnement).

Je peux facilement définir le MinimumLevel en ajoutant une variable d'environnement avec le nom: Serilog:MinimumLevel et le nom de l'application Serilog:Properties:Application.

Quel est le format pour spécifier un paramètre avec un tableau?

34
James Skimming

Après avoir regardé la configuration dans le débogueur, j'ai trouvé la réponse.

Serilog:WriteTo:0:Args:path

J'ai donc besoin d'utiliser l'index du tableau (basé sur zéro) comme s'il s'agissait d'un nom.

Sous la capture d'écran du débogueur au cas où cela aiderait, également (grâce à Victor Hurdugaci dans les commentaires), les tests unitaires sont un bon endroit pour chercher des exemples.

configuration in the debugger

40
James Skimming