[英]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.