配置系统在新的ASP.NET Core中进行了很多更改。较旧的ASP.NET使用Web.config文件存储配置信息。现在,较新的配置系统提供了API,可从各种来源(例如Json,XML,INI,命令行参数,环境变量等)加载配置。让我们看看如何从配置文件appsettings.json 文件中存储和检索配置。
什么是配置
配置是特定于应用程序的参数或初始设置。这些设置与代码分开存储,并且存储在外部文件中。这使开发人员和管理员可以控制和灵活地运行应用程序。例如, 连接到数据库所需的连接字符串信息存储在配置文件中。通过修改连接字符串,我们可以更改数据库名称,位置等,而无需修改代码。
ASP.NET应用程序使用了 Web.config存储配置。例如,连接字符串的存储方式如下所示
在ASP.NET Core中进行配置
ASP.NET Core应用程序中的配置存储在“名称/值对”中。我们可以将其存储为Json,XML或INI文件格式。 下面的示例是Json格式的简单配置
名称/值对可以分为如下所示的多层结构
ASP.NET Core应用程序在启动时会读取配置文件。如果需要更改,还可以将其配置为在运行时读取配置文件。
配置源
ASP.NET Core允许我们从各种来源和文件格式读取配置值。一些常用的来源是
- 文件格式(Json,INI或XML)
- 命令行参数
- 环境变量
- 我们自己创建的自定义提供程序
现在,让我们看一下如何在ASP.NET Core中存储和检索配置。
加载配置
Main方法调用CreateDefaultBuilder,CreateDefaultBuilder执行的任务之一是从各种来源加载配置。与配置应用程序相关的代码在这里
ConfigureAppConfiguration
ConfigureAppConfiguration方法采用两个参数。首先HostingContext是WebHostBuilderContext和config的实例,该实例是IConfigurationBuilder的实例。 WebHostBuilderContext公开了HostingEnvironment属性,该属性使我们知道我们正在运行开发(isDevelopment),生产(IsProduction)还是迭代(IsStaging)环境IConfigurationBuilder提供了几种方法来加载配置文件
从json文件加载配置
AddJsonFile从Json文件加载配置。
第一个参数是json文件的名称。 该路径是相对于ContentRoot的。第二个参数是可选的。第三个参数reloadOnChange(如果为true),如果配置文件的内容更改,则重新加载配置。 无需重新启动应用程序。下一行代码将加载与名称appsettings匹配的代码。{env.EnvironmentName} .json这使我们可以为每个环境使用不同的配置文件,例如appsetting.development.json等。
加载用户机密
这是ASP.NET Core的一项新功能,其中的配置存储在资源库的外部。 称为用户机密,仅适用于开发环境。
从环境变量加载
AddEnvironmentVariables读取所有用户和系统环境变量
从命令行参数加载
AddCommandLine将所有命令行参数加载到配置中
读取配置
默认的Empty模板不会创建appsetting.json文件。 在项目根文件夹中创建appsetting.json文件。添加以下配置。 请注意,配置键不区分大小写。
现在,让我们阅读message属性。 打开startup.cs。使用Microsoft.Extensions.Configuration导入名称空间;要读取配置,我们需要一个IConfiguration实例。 我们可以使用依赖注入在启动类的构造函数中获取它的实例。 也可以在Controller类中使用相同的技术。
然后可以使用Configuration.getSection方法检索它
读取连接字符串
可以如下所示添加数据库连接字符串。 MySQL Connection和SQL Connection字符串分组在ConnectionStrings部分或节点下。
每个节或节点之间用冒号分隔,并按以下方式检索值。
在配置文件中读取数组
要阅读以上内容,请使用数组索引作为用冒号分隔的字符串的一部分,如下所示
命令行
可以从命令行参数加载配置系统。
CreateDefaultBuilder方法使用config.AddCommandLine(args);加载命令行参数。命令行参数应遵循特定规则。 参数必须作为键值对传递。 每个键值对必须以空格分隔。每个键值对必须以空格分隔。打开启动和转到以配置和添加以下代码
打开控制台窗口并转到项目目录,然后调用带有两个命令行参数的dotnet运行
值Hello和world分别显示在浏览器上
读取环境变量
config.AddEnvironmentVariables(); 将环境值加载到配置集合中。然后,我们可以读取一个环境变量,如下所示
添加自己的配置文件
我们还可以添加任意数量的自定义配置文件。 这是一个很好的功能,因为我们可以为每个模块/子系统创建单独的配置文件。 这使配置管理更加容易。在项目的根文件夹中创建一个Test.json
现在,打开program.cs并更新代码,如下所示。
现在,配置系统会自动添加来自Test.json文件的所有配置。
加载顺序
加载配置文件的顺序很重要。 如果两个配置包含相似的密钥,则最后加载的密钥获胜。