ASP.NET?Core中的Configuration配置一
相關(guān)文章
ASP.NET Core2.2 中的Configuration配置一
ASP.NET Core2.2 中的Configuration配置二
1.前言
ASP.NET Core在應(yīng)用程序上引入Microsoft.Extensions.Configuration配置,可以支持多種方式配置,包括命令行配置、環(huán)境變量配置、文件配置、內(nèi)存配置,自定義配置等等。下面我們就其中幾個(gè)配置來聊聊。
2.命令行配置
CommandLineConfigurationProvider在應(yīng)用程序運(yùn)行時(shí)會(huì)從(例如DOS)命令行參數(shù)鍵值加載配置。要激活命令行配置,請(qǐng)?jiān)贑onfigurationBuilder的實(shí)例上調(diào)用AddCommandLine擴(kuò)展方法。使用CreateDefaultBuilder初始化新的WebHostBuilder時(shí)會(huì)自動(dòng)調(diào)用AddCommandLine。
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
// Call other providers here and call AddCommandLine last.
config.AddCommandLine(args);
}).UseStartup<Startup>();
}在Program加入上述代碼并在/Home/Index視圖上添加如下代碼后發(fā)布一個(gè)Web版本掛載在IIS上。


在控制臺(tái)上輸入DOS命令行dotnet D:\Release\Core\TestWebApp.dll CommandLineKey1=value1配置鍵:CommandLineKey1,值:value1的信息,會(huì)看到如下界面信息:

根據(jù)控制臺(tái)監(jiān)聽站點(diǎn)連接,在瀏覽器上打開其中一個(gè),比如打開https://localhost:5001/,會(huì)看到我們配置命令行信息:

3.文件配置
FileConfigurationProvider是從文件系統(tǒng)加載配置的基類。以下配置為應(yīng)用程序提供專用于特定文件類型:INI配置、JSON配置、XML配置。
3.1 INI配置
IniConfigurationProvider在運(yùn)行時(shí)會(huì)從INI文件鍵值對(duì)加載配置。若要激活I(lǐng)NI文件配置,請(qǐng)?jiān)?ConfigurationBuilder的實(shí)例上調(diào)用AddIniFile擴(kuò)展方法,而冒號(hào)可用作INI文件配置中的節(jié)點(diǎn)分隔符。現(xiàn)在我們?cè)贑oreWeb根目錄下添加一個(gè)INI配置文件(命名為config):
[section0] key0=value key1=value [section1] subsection:key=value [section2:subsection0] key=value [section2:subsection1] key=value
而應(yīng)用程序在構(gòu)建主機(jī)時(shí)會(huì)調(diào)用ConfigureAppConfiguration以指定應(yīng)用程序配置(這里我們指定config.ini文件):
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddIniFile(
"config.ini", optional: true, reloadOnChange: true);
})
.UseStartup<Startup>();
}從上述代碼可以看到IConfigurationBuilder設(shè)置了文件訪問初始路徑。Optional:文件是否可選;reloadOnChange:如果文件更改,是否應(yīng)重新加載配置。而通過啟動(dòng)應(yīng)用程序時(shí)會(huì)看到如下配置信息:

3.2 JSON配置
JsonConfigurationProvider在運(yùn)行時(shí)期間會(huì)從JSON文件鍵值對(duì)加載配置。若要激活JSON文件配置,請(qǐng)?jiān)贑onfigurationBuilder的實(shí)例上調(diào)用AddJsonFile擴(kuò)展方法。使用 CreateDefaultBuilder初始化新的WebHostBuilder時(shí),會(huì)自動(dòng)調(diào)用AddJsonFile兩次,調(diào)用該方法(AddJsonFile)來從以下文件加載配置,首先會(huì)讀取appsettings.json該文件。而應(yīng)用程序啟動(dòng)時(shí)是會(huì)默認(rèn)調(diào)用對(duì)應(yīng)的appsettings.{Environment}.json環(huán)境版本的,例如appsettings.{Environment}.json會(huì)根據(jù)IHostingEnvironment.EnvironmentName加載對(duì)應(yīng)文件的環(huán)境版本(開發(fā)模式、生產(chǎn)模式等)?,F(xiàn)在我們?cè)贑oreWeb根目錄下添加一個(gè)JSON配置文件(命名為config):
{
"section0": {
"key0": "key0value",
"key1": "key1value"
},
"section1": {
"key0": "key0value",
"key1": "key1value"
},
"section2": {
"subsection0": {
"key0": "sub0key0value",
"key1": "sub0key1value"
},
"subsection1": {
"key0": "sub1key0value",
"key1": "sub1key1value"
}
}
}而應(yīng)用程序在構(gòu)建主機(jī)時(shí)會(huì)調(diào)用ConfigureAppConfiguration以指定除appsettings.json和appsettings.{Environment}.json以外文件的應(yīng)用程序配置(這里我們指定config.json文件):
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile(
"config.json", optional: true, reloadOnChange: true);
})
.UseStartup<Startup>();
}而通過啟動(dòng)應(yīng)用程序時(shí)會(huì)看到如下配置信息:

從上述信息可以看到,在我們指定config.json文件后,IConfigurationBuilder會(huì)額外多調(diào)用一次AddJsonFile,加上前兩次AddJsonFile,一共是三次。
3.2.1GetSection、GetChildren和Exists
(1)GetSection:IConfiguration.GetSection獲取指定配置子節(jié)。下面我們通過一個(gè)示例來了解下:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var configSection0 = Configuration.GetSection("section0");
var configSection1 = Configuration.GetSection("section0:key0");
}而通過啟動(dòng)應(yīng)用程序時(shí)會(huì)看到如下配置信息:


通過上述示例可以看到,IConfiguration.GetSection僅僅是獲取到j(luò)son數(shù)據(jù)里面configSection0節(jié)點(diǎn)鍵和路徑,并沒有獲取到它的節(jié)點(diǎn)值。若要獲取section0:key0中的鍵值,請(qǐng)?jiān)谡{(diào)用GetSection時(shí)提供完整節(jié)點(diǎn)路徑,如獲取configSection1鍵值示例。
(2)GetChildren:獲取指定配置樹節(jié)點(diǎn)。下面我們通過一個(gè)示例來了解下:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var configSection = Configuration.GetSection("section2");
var children = configSection.GetChildren();
}而通過啟動(dòng)應(yīng)用程序時(shí)會(huì)看到如下配置信息:


GetChildren獲取了指定section2節(jié)點(diǎn)下所有節(jié)點(diǎn)。
(3)Exists:使用ConfigurationExtensions.Exists確定配置節(jié)點(diǎn)是否存在。下面我們通過一個(gè)示例來了解下:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var sectionExists0 = Configuration.GetSection("section2").Exists();//true
var sectionExists1 = Configuration.GetSection("section2:subsection2").Exists();//false
}而通過啟動(dòng)應(yīng)用程序時(shí)會(huì)了解到section2配置節(jié)點(diǎn)如果存在就會(huì)返回true,反之則false;同理section2:subsection2路徑配置節(jié)點(diǎn)亦一樣。
3.3 XML配置
XmlConfigurationProvider在運(yùn)行時(shí)會(huì)從XML文件鍵值對(duì)加載配置。若要激活XML文件配置,請(qǐng)?jiān)贑onfigurationBuilder的實(shí)例上調(diào)用AddXmlFile擴(kuò)展方法?,F(xiàn)在我們?cè)贑oreWeb根目錄下添加一個(gè)XML配置文件(命名為config):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<section0>
<key0>value</key0>
<key1>value</key1>
</section0>
<section1>
<key0>value</key0>
<key1>value</key1>
</section1>
</configuration>而應(yīng)用程序在構(gòu)建主機(jī)時(shí)調(diào)用ConfigureAppConfiguration以指定應(yīng)用程序的配置(這里我們指定config.xml文件):
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddXmlFile(
"config.xml", optional: true, reloadOnChange: true);
})
.UseStartup<Startup>();
}而通過啟動(dòng)應(yīng)用程序時(shí)會(huì)看到如下配置信息:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
.Net結(jié)構(gòu)型設(shè)計(jì)模式之享元模式(Flyweight)
這篇文章介紹了.Net結(jié)構(gòu)型設(shè)計(jì)模式之享元模式(Flyweight),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C#Web應(yīng)用程序入門經(jīng)典學(xué)習(xí)筆記之一
C#Web應(yīng)用程序入門經(jīng)典學(xué)習(xí)筆記之一...2006-08-08
ASP.NET?Core?MVC路由(Routing)的用法
這篇文章介紹了ASP.NET?Core?MVC路由(Routing)的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
C#Web應(yīng)用程序入門經(jīng)典學(xué)習(xí)筆記之二
C#Web應(yīng)用程序入門經(jīng)典學(xué)習(xí)筆記之二...2006-08-08

