如何将环境变量映射到appsettings.json嵌套配置实现覆写
嵌套配置映射环境变量通用方案
你遇到的不生效问题是类Unix系统(WSL、Linux、Docker Linux容器等)的系统规则限制:环境变量名称不允许包含冒号:,所以你用Jwt:PublicKey作为变量名无法被系统正确识别读取。
ASP.NET Core 配置体系原生提供了跨平台的嵌套配置环境变量映射规则,不需要修改业务代码即可适配全环境:
- Windows 环境下可以继续使用冒号
:作为层级分隔符,例如Jwt:PublicKey - 类Unix 环境下统一使用**双下划线
__**作为层级分隔符,这是官方指定的跨平台兼容方案,配置提供程序会自动将双下划线转换为逻辑层级分隔符和appsettings.json的嵌套结构做匹配
对应你的Jwt配置,只需要把环境变量名改为如下格式即可生效:
- 公钥对应变量名:
Jwt__PublicKey - 私钥对应变量名:
Jwt__PrivateKey
常见场景使用示例
WSL下临时设置测试
export Jwt__PublicKey="你的实际公钥字符串" export Jwt__PrivateKey="你的实际私钥字符串" dotnet run
Docker启动时传入
docker run \ -e Jwt__PublicKey="你的实际公钥字符串" \ -e Jwt__PrivateKey="你的实际私钥字符串" \ 你的应用镜像名称
Docker Compose中配置
services: your-app: image: 你的应用镜像名称 environment: - Jwt__PublicKey=你的实际公钥字符串 - Jwt__PrivateKey=你的实际私钥字符串
扩展:数组类型配置的映射
如果配置包含数组结构,只需要在双下划线后加数组索引即可,比如如下配置:
{ "Serilog": { "WriteTo": [ {"Name": "Console"}, {"Name": "File"} ] } }
对应第一个WriteTo项的Name属性,环境变量名为Serilog__WriteTo__0__Name
内容的提问来源于stack exchange,提问作者Serhii
相关产品推荐
相关产品推荐

