ASP.NET Core 6 基础入门系列(18) ASP.NET Core 中的配置介绍

 

ASP.NET Core 中的应用程序配置是使用一个或多个配置提供程序执行的。 配置提供程序使用各种配置源从键值对读取配置数据:

  • 设置文件,例如 appsettings.json
  • 环境变量
  • Azure Key Vault
  • Azure 应用程序配置
  • 命令行参数
  • 已安装或已创建的自定义提供程序
  • 目录文件
  • 内存中的 .NET 对象

新建的ASP.NET Core 项目中首先见到的就是 launchSettings.json 与 appsettings.json 文件,需要了解详细信息可以参考我之前的博客

配置提供程序

  下表显示了 ASP.NET Core 应用可用的配置提供程序

按照指定的配置提供程序的顺序读取配置源。 代码中的配置提供程序应以特定顺序排列,从而满足应用所需的基础配置源的优先级。

配置提供程序的典型顺序为:

(1)appsettings.json

(2)appsettings.{Environment}.json

(3)用户机密

(4)使用环境变量配置提供程序通过环境变量提供。

(5)使用命令行配置提供程序通过命令行参数提供。

建议:通常的做法是将命令行配置提供程序添加到一系列提供程序的末尾,使命令行参数能够替代由其他提供程序设置的配置。

下面通过程序来读取应用程序中已启用的配置提供程序

(1)通过IISExpress方式以及项目方式调试运行,获取到的已启用的配置提供程序列表如下

其中有一个 JsonConfigurationProvider for‘appsettings.Development.json’提供程序,原因是 launchSettings.json 配置的环境信息就是 "ASPNETCORE_ENVIRONMENT": "Development" 模式

把"ASPNETCORE_ENVIRONMENT" 改成  "Production",再次运行,读取的就是 Production.json文件

(2)通过 dotnet run 命令访问程序(Development模式),获取到的已启用的配置提供程序列表如下

其中有一个 JsonConfigurationProvider for‘appsettings.Development.json’提供程序,原因与上述相同。

(3)将项目发布后访问,获取到的已启用的配置提供程序列表如下

发布后的程序默认是 Production 生产模式。

后来添加的配置提供程序具有更高的优先级并且会替代之前的密钥设置。 例如,如果 appsettings.json 和环境中都设置了 MyKey,则使用环境值。 通过默认配置提供程序,命令行配置提供程序 将替代其他所有提供程序。

默认主机配置源

以下列表包含优先级从低到高的默认主机配置源:

1、使用 环境变量配置提供程序 通过以 DOTNET_ 为前缀的环境变量提供。

2、使用 命令行配置提供程序 通过命令行参数提供。

3、使用 环境变量配置提供程序 通过以 ASPNETCORE_ 为前缀的环境变量提供。

在主机和应用程序配置中设置配置值时,将使用应用程序配置。

在主机配置中以 ASPNETCORE_ 为前缀的环境变量的优先级高于命令行参数的原因如下:

应用程序配置会返回到主机配置,所以您可能会想,为什么在主机配置中,命令行参数会以较低的优先级再次添加。答案是,在初始化 WebApplicationBuilder 和 IHostBuilder.Build() 的早期阶段,应用程序配置尚未构建。
由于我们希望允许命令行参数在默认情况下控制环境名称(这对于构建应用程序配置非常重要,因为这决定了要加载哪些 appsettings.{environment}.json),因此命令行被添加了两次作为配置源。

默认应用程序配置源

通过 dotnet new 命令或 Visual Studio 创建的 ASP.NET Core Web 应用会生成以下代码:

var builder = WebApplication.CreateBuilder(args);

WebApplication.CreateBuilder 使用预配置的默认值初始化类的新实例。 经过初始化的 WebApplicationBuilder (builder) 按照以下顺序为应用提供默认配置(优先级从低到高):

1、回退到上一部分所述的默认主机配置。

2、使用 JSON 配置提供程序 读取 appsettings.json 文件。

3、使用 JSON 配置提供程序 读取 appsettings.{Environment}.json 文件。 例如,appsettings.Production.jsonappsettings.Development.json

4、应用在环境中运行时的 用户机密

5、使用 非前缀环境变量配置提供程序 通过非前缀环境变量提供。

6、使用 命令行配置提供程序 通过命令行参数提供。

XXXX5

22

XXXX6

22

XXXX7

22

 


参考文献:

  • 《ASP.NET Core 中的配置》https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0
posted @   张传宁  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
页脚 HTML 代码
点击右上角即可分享
微信分享提示