配置(Configuration)文件
配置文件在ASP.NET Core Razor Pages应用程序开发中是基于键值对存储的数据文件。.NET Core应用程序通过 “配置提供程序”(configuration provider)读取配置文件中的配置数据。配置文件的数据源可以有多种,如:
- Azure Key Vault(基于Azure的键值数据库)
- Command-line arguments(命令行参数)
- Custom providers(自定义数据源提供程序)
- Directory files(字典文件)
- Environment variables(环境变量)
- In-memory .NET objects(内存中的.NET的对象)
- Settings files(配置文件)
你可以使用其他如:.xml,.ini等存储数据的文件格式。在.NET Core应用程序中,配置通用依赖注入(DI)被添加到全局服务中,你可以通用IConfiguration
接口的实例来访问设定好的配置数据。
在.NET Core应用程序中,我们可以在Program.cs
文件中设置全局的配置文件以及其选项,通用WebHost.CreateDefaultBuilder()
的扩展方法ConfigureAppConfiguration()
,如:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false);
})
.UseStartup<Startup>();
如果你需要在一个.NET Core应用程序中同时指定多个配置文件,则可以如下:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddInMemoryCollection(arrayDict);
config.AddJsonFile("json_array.json", optional: false, reloadOnChange: false);
config.AddJsonFile("starship.json", optional: false, reloadOnChange: false);
config.AddXmlFile("tvshow.xml", optional: false, reloadOnChange: false);
config.AddEFConfiguration(options => options.UseInMemoryDatabase("InMemoryDb"));
config.AddCommandLine(args);
})
.UseStartup<Startup>();
数据安全性
为了保护配置文件的数据,请考虑以下最佳安全实践:
- 永远不要在配置提供程序代码或纯文本配置文件中存储密码或其他敏感数据。
- 不要在开发或测试环境中使用生产环境的密码和敏感数据。
- 在项目之外指定密码或者敏感数据,这样它们就不会意外地提交到源代码存储库中。
AppSettings.json
appsettings.json
是ASP.NET Core中默认的配置文件,位于项目根目录下,默认内容为:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
appsettings.json
文件的内容其实就是一个JSON
的字符串。其中的配置数据分别存储在各自的节点中。比如,如果需要在appsettings.json
文件中添加数据库的连接字符串,则可以新增JSON节点,如下:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=DncZeus;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
其中的ConnectionStrings
即为我们新增的数据库连接字符串的配置节点,DefaultConnection
是一个SQL Server localdb的数据库连接字符串。
层级结构的数据格式
读取配置数据的API可以使用分隔符(:)来扁平化地读取多层级的配置数据,比如下面的示例JSON文件配置了包含4个键的两个不同的节点:
{
"section0": {
"key0": "value",
"key1": "value"
},
"section1": {
"key0": "value",
"key1": "value"
}
}
将这个配置文件装载进.NET Core的全局配置缓存时,将创建惟一的键来维护配置源的原始分层数据结构,并使用冒号(:)将节点和键扁平化处理,以维护原始结构,上面的JSON会被扁平化为如下结构:
section0:key0
section0:key1
section1:key0
section1:key1
配置约定
配置键约定
在.NET Core启动的时候,所有配置文件会按照配置提供程序指定的规则被读取并装载进全局配置缓存中。在程序启动之后,文件配置提供程序可以自动监控配置文件是否有改变,如果有改变,则会自动重新读取配置文件中的数据。
配置文件中的配置键使用如下的一些约定:
- 键不区分大小写:比如
ConnectionString
和connectionstring
是相同的键。 - 如果同一个键的值由相同或不同的配置提供程序设置,则该键上的最后一个值就是所使用的值。
- 分层的键:
- 在配置API中,冒号分隔符(:)适用于所有平台
- 在环境变量中,冒号分隔符可能不支持在所有平台都能正常使用。所有平台都支持双下划线(__),并将其转换为冒号。
- 在Azure Key Vault中,分层的键使用——(两个破折号)作为分隔符。当配置数据被加载到应用程序的配置中时,必须提供代码并用冒号替换破折号。
- ConfigurationBinder支持使用配置键中的数组索引将数组绑定到对象。
配置值约定
配置文件中配置项的值采用如下的一些约定:
- 配置项的值均为字符串。
- 空值(Null)不能存储在配置中或绑定到对象中。
配置提供程序
微软官方内置了多种配置的提供程序,如下表格:
提供程序 | 适用的配置源 |
---|---|
Azure Key Vault Configuration Provider | Azure Key Vault |
Command-line Configuration Provider | 命令行参数 |
Custom configuration provider | 自定义配置数据源 |
Environment Variables Configuration Provider | 环境变量 |
File Configuration Provider | 文件(.ini,.xml,.json) |
Key-per-file Configuration Provider | 目录中的所有文件 |
Memory Configuration Provider | 内存配置数据 |
User secrets (Secret Manager) | 在用户配置文件目录中的文件 |
好了,本节ASP.NET Core 配置(Configuration)文件的内容就为大家介绍到这里了。
配置数据源将在应用程序启动时按照特定的配置文件提供程序指定的顺序被读取。本文中描述的配置提供程序是按字母顺序的,而不是按照代码书写的顺序。可以在代码中设置配置提供程序,以适应底层配置源的优先级。
一个典型的配置提供程序顺序为:
- Files(文件,如:appsettings.json)
- Azure Key Vault
- User secrets (Secret Manager)
- Environment variables(环境变量)
- Command-line arguments(命令行参数)
我是Rector,我们下节再见。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册