配置系统在新的ASP.NET Core中进行了很多更改。较旧的ASP.NET使用Web.config文件存储配置信息。现在,较新的配置系统提供了API,可从各种来源(例如Json,XML,INI,命令行参数,环境变量等)加载配置。让我们看看如何从配置文件appsettings.json 文件中存储和检索配置。

什么是配置

配置是特定于应用程序的参数或初始设置。这些设置与代码分开存储,并且存储在外部文件中。这使开发人员和管理员可以控制和灵活地运行应用程序。例如, 连接到数据库所需的连接字符串信息存储在配置文件中。通过修改连接字符串,我们可以更改数据库名称,位置等,而无需修改代码。

ASP.NET应用程序使用了 Web.config存储配置。例如,连接字符串的存储方式如下所示

asp.net core 自定义授权 asp.net core 配置_配置文件

在ASP.NET Core中进行配置

ASP.NET Core应用程序中的配置存储在“名称/值对”中。我们可以将其存储为Json,XML或INI文件格式。 下面的示例是Json格式的简单配置

asp.net core 自定义授权 asp.net core 配置_asp.net core 自定义授权_02

名称/值对可以分为如下所示的多层结构

asp.net core 自定义授权 asp.net core 配置_加载_03

ASP.NET Core应用程序在启动时会读取配置文件。如果需要更改,还可以将其配置为在运行时读取配置文件。

配置源

ASP.NET Core允许我们从各种来源和文件格式读取配置值。一些常用的来源是

  1. 文件格式(Json,INI或XML)
  2. 命令行参数
  3. 环境变量
  4. 我们自己创建的自定义提供程序

现在,让我们看一下如何在ASP.NET Core中存储和检索配置。

加载配置

asp.net core 自定义授权 asp.net core 配置_asp.net core_04

Main方法调用CreateDefaultBuilder,CreateDefaultBuilder执行的任务之一是从各种来源加载配置。与配置应用程序相关的代码在这里

asp.net core 自定义授权 asp.net core 配置_asp.net core 自定义授权_05

ConfigureAppConfiguration 

ConfigureAppConfiguration方法采用两个参数。首先HostingContext是WebHostBuilderContext和config的实例,该实例是IConfigurationBuilder的实例。 WebHostBuilderContext公开了HostingEnvironment属性,该属性使我们知道我们正在运行开发(isDevelopment),生产(IsProduction)还是迭代(IsStaging)环境IConfigurationBuilder提供了几种方法来加载配置文件

从json文件加载配置

AddJsonFile从Json文件加载配置。

asp.net core 自定义授权 asp.net core 配置_配置文件_06

第一个参数是json文件的名称。 该路径是相对于ContentRoot的。第二个参数是可选的。第三个参数reloadOnChange(如果为true),如果配置文件的内容更改,则重新加载配置。 无需重新启动应用程序。下一行代码将加载与名称appsettings匹配的代码。{env.EnvironmentName} .json这使我们可以为每个环境使用不同的配置文件,例如appsetting.development.json等。

asp.net core 自定义授权 asp.net core 配置_ASP_07

加载用户机密

这是ASP.NET Core的一项新功能,其中的配置存储在资源库的外部。 称为用户机密,仅适用于开发环境。

asp.net core 自定义授权 asp.net core 配置_asp.net core_08

从环境变量加载

AddEnvironmentVariables读取所有用户和系统环境变量

asp.net core 自定义授权 asp.net core 配置_加载_09

从命令行参数加载

AddCommandLine将所有命令行参数加载到配置中

asp.net core 自定义授权 asp.net core 配置_ASP_10

读取配置

默认的Empty模板不会创建appsetting.json文件。 在项目根文件夹中创建appsetting.json文件。添加以下配置。 请注意,配置键不区分大小写。

asp.net core 自定义授权 asp.net core 配置_配置文件_11

现在,让我们阅读message属性。 打开startup.cs。使用Microsoft.Extensions.Configuration导入名称空间;要读取配置,我们需要一个IConfiguration实例。 我们可以使用依赖注入在启动类的构造函数中获取它的实例。 也可以在Controller类中使用相同的技术。

asp.net core 自定义授权 asp.net core 配置_ASP_12

然后可以使用Configuration.getSection方法检索它

asp.net core 自定义授权 asp.net core 配置_asp.net core_13

读取连接字符串

可以如下所示添加数据库连接字符串。 MySQL Connection和SQL Connection字符串分组在ConnectionStrings部分或节点下。

asp.net core 自定义授权 asp.net core 配置_ASP_14

每个节或节点之间用冒号分隔,并按以下方式检索值。

asp.net core 自定义授权 asp.net core 配置_asp.net core 自定义授权_15

在配置文件中读取数组

asp.net core 自定义授权 asp.net core 配置_加载_16

要阅读以上内容,请使用数组索引作为用冒号分隔的字符串的一部分,如下所示

asp.net core 自定义授权 asp.net core 配置_加载_17

命令行

可以从命令行参数加载配置系统。

CreateDefaultBuilder方法使用config.AddCommandLine(args);加载命令行参数。命令行参数应遵循特定规则。 参数必须作为键值对传递。 每个键值对必须以空格分隔。每个键值对必须以空格分隔。打开启动和转到以配置和添加以下代码

asp.net core 自定义授权 asp.net core 配置_asp.net core 自定义授权_18

打开控制台窗口并转到项目目录,然后调用带有两个命令行参数的dotnet运行

asp.net core 自定义授权 asp.net core 配置_asp.net core 自定义授权_19

值Hello和world分别显示在浏览器上

读取环境变量

config.AddEnvironmentVariables(); 将环境值加载到配置集合中。然后,我们可以读取一个环境变量,如下所示

asp.net core 自定义授权 asp.net core 配置_asp.net core 自定义授权_20

添加自己的配置文件

我们还可以添加任意数量的自定义配置文件。 这是一个很好的功能,因为我们可以为每个模块/子系统创建单独的配置文件。 这使配置管理更加容易。在项目的根文件夹中创建一个Test.json

asp.net core 自定义授权 asp.net core 配置_asp.net core_21

现在,打开program.cs并更新代码,如下所示。

asp.net core 自定义授权 asp.net core 配置_ASP_22

现在,配置系统会自动添加来自Test.json文件的所有配置。

asp.net core 自定义授权 asp.net core 配置_asp.net core_23

加载顺序

加载配置文件的顺序很重要。 如果两个配置包含相似的密钥,则最后加载的密钥获胜。