ASP.NET Core中的Configuration配置应该如何进行优化和调整?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1495个文字,预计阅读时间需要6分钟。
目录
1.前言
2.命令行配置
3.文件配置
3.1 INI配置 3.2 JSON配置 3.2.1 GetSection、GetChildren和Exists 3.3 XML配置 相关文章 ASP.NET Core 2.2 中的 Configuration 配置一 ASP.NET Core 2.2 中的 Configuration 配置二1.前言
2.命令行配置
3.文件配置
3.1 INI配置 3.2 JSON配置 3.2.1 GetSection、GetChildren和Exists 3.3 XML配置 相关文章 ASP.NET Core 2.2 中的 Configuration 配置一 ASP.NET Core 2.2 中的 Configuration 配置二目录
- 1.前言
- 2.命令行配置
- 3.文件配置
- 3.1 INI配置
- 3.2 JSON配置
- 3.2.1GetSection、GetChildren和Exists
- 3.3 XML配置
相关文章
ASP.NET Core2.2 中的Configuration配置一
ASP.NET Core2.2 中的Configuration配置二
1.前言
ASP.NET Core在应用程序上引入Microsoft.Extensions.Configuration配置,可以支持多种方式配置,包括命令行配置、环境变量配置、文件配置、内存配置,自定义配置等等。下面我们就其中几个配置来聊聊。
2.命令行配置
CommandLineConfigurationProvider在应用程序运行时会从(例如DOS)命令行参数键值加载配置。要激活命令行配置,请在ConfigurationBuilder的实例上调用AddCommandLine扩展方法。使用CreateDefaultBuilder初始化新的WebHostBuilder时会自动调用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视图上添加如下代码后发布一个Web版本挂载在IIS上。
在控制台上输入DOS命令行dotnet D:\Release\Core\TestWebApp.dll CommandLineKey1=value1配置键:CommandLineKey1,值:value1的信息,会看到如下界面信息:
根据控制台监听站点连接,在浏览器上打开其中一个,比如打开localhost:5001/,会看到我们配置命令行信息:
3.文件配置
FileConfigurationProvider是从文件系统加载配置的基类。以下配置为应用程序提供专用于特定文件类型:INI配置、JSON配置、XML配置。
3.1 INI配置
IniConfigurationProvider在运行时会从INI文件键值对加载配置。若要激活INI文件配置,请在 ConfigurationBuilder的实例上调用AddIniFile扩展方法,而冒号可用作INI文件配置中的节点分隔符。现在我们在CoreWeb根目录下添加一个INI配置文件(命名为config):
[section0] key0=value key1=value [section1] subsection:key=value [section2:subsection0] key=value [section2:subsection1] key=value
而应用程序在构建主机时会调用ConfigureAppConfiguration以指定应用程序配置(这里我们指定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设置了文件访问初始路径。Optional:文件是否可选;reloadOnChange:如果文件更改,是否应重新加载配置。而通过启动应用程序时会看到如下配置信息:
3.2 JSON配置
JsonConfigurationProvider在运行时期间会从JSON文件键值对加载配置。若要激活JSON文件配置,请在ConfigurationBuilder的实例上调用AddJsonFile扩展方法。使用 CreateDefaultBuilder初始化新的WebHostBuilder时,会自动调用AddJsonFile两次,调用该方法(AddJsonFile)来从以下文件加载配置,首先会读取appsettings.json该文件。而应用程序启动时是会默认调用对应的appsettings.{Environment}.json环境版本的,例如appsettings.{Environment}.json会根据IHostingEnvironment.EnvironmentName加载对应文件的环境版本(开发模式、生产模式等)。现在我们在CoreWeb根目录下添加一个JSON配置文件(命名为config):
{ "section0": { "key0": "key0value", "key1": "key1value" }, "section1": { "key0": "key0value", "key1": "key1value" }, "section2": { "subsection0": { "key0": "sub0key0value", "key1": "sub0key1value" }, "subsection1": { "key0": "sub1key0value", "key1": "sub1key1value" } } }
而应用程序在构建主机时会调用ConfigureAppConfiguration以指定除appsettings.json和appsettings.{Environment}.json以外文件的应用程序配置(这里我们指定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>(); }
而通过启动应用程序时会看到如下配置信息:
从上述信息可以看到,在我们指定config.json文件后,IConfigurationBuilder会额外多调用一次AddJsonFile,加上前两次AddJsonFile,一共是三次。
3.2.1GetSection、GetChildren和Exists
(1)GetSection:IConfiguration.GetSection获取指定配置子节。下面我们通过一个示例来了解下:
public Startup(IConfiguration configuration) { Configuration = configuration; var configSection0 = Configuration.GetSection("section0"); var configSection1 = Configuration.GetSection("section0:key0"); }
而通过启动应用程序时会看到如下配置信息:
通过上述示例可以看到,IConfiguration.GetSection仅仅是获取到json数据里面configSection0节点键和路径,并没有获取到它的节点值。若要获取section0:key0中的键值,请在调用GetSection时提供完整节点路径,如获取configSection1键值示例。
(2)GetChildren:获取指定配置树节点。下面我们通过一个示例来了解下:
public Startup(IConfiguration configuration) { Configuration = configuration; var configSection = Configuration.GetSection("section2"); var children = configSection.GetChildren(); }
而通过启动应用程序时会看到如下配置信息:
GetChildren获取了指定section2节点下所有节点。
(3)Exists:使用ConfigurationExtensions.Exists确定配置节点是否存在。下面我们通过一个示例来了解下:
public Startup(IConfiguration configuration) { Configuration = configuration; var sectionExists0 = Configuration.GetSection("section2").Exists();//true var sectionExists1 = Configuration.GetSection("section2:subsection2").Exists();//false }
而通过启动应用程序时会了解到section2配置节点如果存在就会返回true,反之则false;同理section2:subsection2路径配置节点亦一样。
3.3 XML配置
XmlConfigurationProvider在运行时会从XML文件键值对加载配置。若要激活XML文件配置,请在ConfigurationBuilder的实例上调用AddXmlFile扩展方法。现在我们在CoreWeb根目录下添加一个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>
而应用程序在构建主机时调用ConfigureAppConfiguration以指定应用程序的配置(这里我们指定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>(); }
而通过启动应用程序时会看到如下配置信息:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计1495个文字,预计阅读时间需要6分钟。
目录
1.前言
2.命令行配置
3.文件配置
3.1 INI配置 3.2 JSON配置 3.2.1 GetSection、GetChildren和Exists 3.3 XML配置 相关文章 ASP.NET Core 2.2 中的 Configuration 配置一 ASP.NET Core 2.2 中的 Configuration 配置二1.前言
2.命令行配置
3.文件配置
3.1 INI配置 3.2 JSON配置 3.2.1 GetSection、GetChildren和Exists 3.3 XML配置 相关文章 ASP.NET Core 2.2 中的 Configuration 配置一 ASP.NET Core 2.2 中的 Configuration 配置二目录
- 1.前言
- 2.命令行配置
- 3.文件配置
- 3.1 INI配置
- 3.2 JSON配置
- 3.2.1GetSection、GetChildren和Exists
- 3.3 XML配置
相关文章
ASP.NET Core2.2 中的Configuration配置一
ASP.NET Core2.2 中的Configuration配置二
1.前言
ASP.NET Core在应用程序上引入Microsoft.Extensions.Configuration配置,可以支持多种方式配置,包括命令行配置、环境变量配置、文件配置、内存配置,自定义配置等等。下面我们就其中几个配置来聊聊。
2.命令行配置
CommandLineConfigurationProvider在应用程序运行时会从(例如DOS)命令行参数键值加载配置。要激活命令行配置,请在ConfigurationBuilder的实例上调用AddCommandLine扩展方法。使用CreateDefaultBuilder初始化新的WebHostBuilder时会自动调用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视图上添加如下代码后发布一个Web版本挂载在IIS上。
在控制台上输入DOS命令行dotnet D:\Release\Core\TestWebApp.dll CommandLineKey1=value1配置键:CommandLineKey1,值:value1的信息,会看到如下界面信息:
根据控制台监听站点连接,在浏览器上打开其中一个,比如打开localhost:5001/,会看到我们配置命令行信息:
3.文件配置
FileConfigurationProvider是从文件系统加载配置的基类。以下配置为应用程序提供专用于特定文件类型:INI配置、JSON配置、XML配置。
3.1 INI配置
IniConfigurationProvider在运行时会从INI文件键值对加载配置。若要激活INI文件配置,请在 ConfigurationBuilder的实例上调用AddIniFile扩展方法,而冒号可用作INI文件配置中的节点分隔符。现在我们在CoreWeb根目录下添加一个INI配置文件(命名为config):
[section0] key0=value key1=value [section1] subsection:key=value [section2:subsection0] key=value [section2:subsection1] key=value
而应用程序在构建主机时会调用ConfigureAppConfiguration以指定应用程序配置(这里我们指定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设置了文件访问初始路径。Optional:文件是否可选;reloadOnChange:如果文件更改,是否应重新加载配置。而通过启动应用程序时会看到如下配置信息:
3.2 JSON配置
JsonConfigurationProvider在运行时期间会从JSON文件键值对加载配置。若要激活JSON文件配置,请在ConfigurationBuilder的实例上调用AddJsonFile扩展方法。使用 CreateDefaultBuilder初始化新的WebHostBuilder时,会自动调用AddJsonFile两次,调用该方法(AddJsonFile)来从以下文件加载配置,首先会读取appsettings.json该文件。而应用程序启动时是会默认调用对应的appsettings.{Environment}.json环境版本的,例如appsettings.{Environment}.json会根据IHostingEnvironment.EnvironmentName加载对应文件的环境版本(开发模式、生产模式等)。现在我们在CoreWeb根目录下添加一个JSON配置文件(命名为config):
{ "section0": { "key0": "key0value", "key1": "key1value" }, "section1": { "key0": "key0value", "key1": "key1value" }, "section2": { "subsection0": { "key0": "sub0key0value", "key1": "sub0key1value" }, "subsection1": { "key0": "sub1key0value", "key1": "sub1key1value" } } }
而应用程序在构建主机时会调用ConfigureAppConfiguration以指定除appsettings.json和appsettings.{Environment}.json以外文件的应用程序配置(这里我们指定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>(); }
而通过启动应用程序时会看到如下配置信息:
从上述信息可以看到,在我们指定config.json文件后,IConfigurationBuilder会额外多调用一次AddJsonFile,加上前两次AddJsonFile,一共是三次。
3.2.1GetSection、GetChildren和Exists
(1)GetSection:IConfiguration.GetSection获取指定配置子节。下面我们通过一个示例来了解下:
public Startup(IConfiguration configuration) { Configuration = configuration; var configSection0 = Configuration.GetSection("section0"); var configSection1 = Configuration.GetSection("section0:key0"); }
而通过启动应用程序时会看到如下配置信息:
通过上述示例可以看到,IConfiguration.GetSection仅仅是获取到json数据里面configSection0节点键和路径,并没有获取到它的节点值。若要获取section0:key0中的键值,请在调用GetSection时提供完整节点路径,如获取configSection1键值示例。
(2)GetChildren:获取指定配置树节点。下面我们通过一个示例来了解下:
public Startup(IConfiguration configuration) { Configuration = configuration; var configSection = Configuration.GetSection("section2"); var children = configSection.GetChildren(); }
而通过启动应用程序时会看到如下配置信息:
GetChildren获取了指定section2节点下所有节点。
(3)Exists:使用ConfigurationExtensions.Exists确定配置节点是否存在。下面我们通过一个示例来了解下:
public Startup(IConfiguration configuration) { Configuration = configuration; var sectionExists0 = Configuration.GetSection("section2").Exists();//true var sectionExists1 = Configuration.GetSection("section2:subsection2").Exists();//false }
而通过启动应用程序时会了解到section2配置节点如果存在就会返回true,反之则false;同理section2:subsection2路径配置节点亦一样。
3.3 XML配置
XmlConfigurationProvider在运行时会从XML文件键值对加载配置。若要激活XML文件配置,请在ConfigurationBuilder的实例上调用AddXmlFile扩展方法。现在我们在CoreWeb根目录下添加一个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>
而应用程序在构建主机时调用ConfigureAppConfiguration以指定应用程序的配置(这里我们指定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>(); }
而通过启动应用程序时会看到如下配置信息:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

