【问题标题】:.NET ConfigurationBuilder - Parse a JSON string stored in an environment variable.NET ConfigurationBuilder - 解析存储在环境变量中的 JSON 字符串
【发布时间】:2021-10-08 20:49:14
【问题描述】:

由于某些原因,我在环境变量中存储了一个 json 块。

例如,我有一个名为 Serilog 的环境变量,其中包含我的 Serilog 配置:

{
    "Enrich": ["WithThreadId"],
    "MinimumLevel": {
        "Default": "Debug",
        "Override": {
            "Microsoft": "Warning",
            "System": "Debug"
        }
    },
    "WriteTo": [{
        "Args": {
            "outputTemplate": "redacted"
        },
        "Name": "Console"
    }, {
        "Args": {
            "fileSizeLimitBytes": 52428800,
            "logDirectory": "redacted",
            "logFilePrefix": "logfile",
            "outputTemplate": "redacted",
            "retainedFileCountLimit": 15
        },
        "Name": "RollingFileAlternate"
    }]
}

在我应用的启动类中,我有以下配置代码:

            var configuration = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddEnvironmentVariables()
                .Build();

目前,当应用程序启动时,会读取Serilog 环境变量,但它只是作为文字字符串读取,并且没有转换为ConfigurationBuilder 将是的正确键值对预计生产。

我猜这是因为它期望环境变量是简单的键值对,而不是复杂的 JSON 对象。

出于我宁愿跳过的原因,我需要完成这项工作。

如何告诉 .NET 解析存储在环境变量中的 JSON 字符串并将其用于配置?

【问题讨论】:

    标签: json .net configuration environment-variables


    【解决方案1】:

    如果要将设置作为键值对传递,则需要设置为 separate variables__ 而不是 json 的 :,当元素结构包含数组时,数组索引应视为此路径中的附加元素名称:

    Serilog__MinimumLevel__Default=Debug
    Serilog__MinimumLevel__Override__Microsoft=Warning
    Serilog__Enrich__0=WithThreadId
    

    【讨论】:

    • 我不想使用单独的变量。由于某些原因(我不想详细说明),我需要将其作为单个环境变量来阅读。
    • @Bassinator AFAIK 你不能这样做。作为解决方法,您可以实现 custom configuration provider 从环境变量中读取字符串,将其解析为 json 并根据需要公开。
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2017-11-10
    • 2021-08-05
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多