[英]Prefixed Environment Variables in .NET 6
实际上,这个问题是在我深入研究 .NET 6 中的配置设置时出现的。我已经设置了要在生产 Windows 服务器中使用的系统环境变量。 根据 MS 文档,如果我们想要读取系统环境变量,则需要使用.AddEnvironmentVariables()
扩展方法。 因此,我修改了我的 Program.cs (Main()),如下所示。
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env}.json",optional:true)
.AddEnvironmentVariables()
.Build();
我读了这样的环境变量
var conString = configuration["DBConnection:ConnectionString"];
这一切都很好。 一切都按预期工作。
我的问题是,即使我删除.AddEnvironmentVariables()
扩展方法它也能工作。 这是因为,.NET 给予环境变量更高的优先级(如果我错了请纠正我)。 另外,请参考此链接。
然后我在研究.AddEnvironmentVariables()
还能做些什么。 实际上它可以用来设置前缀环境变量,比如.AddEnvironmentVariables(prefix:"P2:")
,我已经将我的前缀环境变量设置为P2__Name
,另一个环境变量设置为Name
。 我正在阅读该值
var name = configuration["Name"];
当我运行 api 时,它总是会读取"Name"
环境变量的值。 不是"P2__Name"
值。 我做错了什么。 它不应该返回带前缀的环境变量值吗?
ps我有多个 .net 应用程序要托管在单个 Windows 服务器中。 它们在appsettings.json
中都有 dbConnection 字符串。 我想从appsettings.json
中删除它们并将它们保留为环境变量
至于你的P2__Name
和Name
环境变量:
使用
MyCustomPrefix_
前缀设置的环境变量会覆盖默认配置提供程序。 这包括没有前缀的环境变量。
前缀不会是配置键的一部分! 因此两者都将具有Name
配置键,并且根据文档P2__Name
环境变量的值应该覆盖Name
配置键的值。
建议您的前缀以单个下划线字符 ( _
) 结尾。
冒号字符 ( :
) 和双下划线字符串 ( __
) 是层次分隔符(它们与您的前缀无关),请参阅配置键和值部分。
在环境变量中,冒号分隔符可能不适用于所有平台。 双下划线
__
受所有平台支持,并自动转换为冒号:
。
要有一个带前缀的连接字符串,请参阅文档是否其中一个特殊前缀适合您的需要。
您也可以使用自定义前缀。
// Option #1: custom prefix: MyCustomPrefix_ (Key: "A1")
// MyCustomPrefix_ConnectionStrings__A1=AbcConnectionString
// Option #2: special prefix: CUSTOMCONNSTR_ (Key: "A2")
// CUSTOMCONNSTR_A2=CustomConnectionString
// Option #3: special prefix: SQLCONNSTR_ (Key: "A3")
// SQLCONNSTR_A3=MssqlConnectionString
// Option #4: special prefix: MYSQLCONNSTR_ (Key: "A4")
// MYSQLCONNSTR_A4=MySqlConnectionString
// Option #5: special prefix: SQLAZURECONNSTR_ (Key: "A5")
// SQLAZURECONNSTR_A5=AzureSqlConnectionString
IConfiguration configuration =
new ConfigurationBuilder()
.AddEnvironmentVariables("MyCustomPrefix_")
.Build();
string myCustomPrefixedConnectionString = configuration.GetConnectionString("A1");
string customConnectionString = configuration.GetConnectionString("A2");
string mssqlConnectionString = configuration.GetConnectionString("A3");
string mysqlConnectionString = configuration.GetConnectionString("A4");
string azuresqlConnectionString = configuration.GetConnectionString("A5");
总结:
YourCustomPrefix_ConnectionStrings__YourKey
...CONNSTR_YourKey
其中...
可以是CUSTOM
、 SQL
、 MYSQL
和SQLAZURE
要获取连接字符串,只需要YourKey
:
string connectionString = configuration.GetConnectionString("YourKey");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.