环境变量名称如何反映 appsettings.json 的结构

2024-04-03

我正在使用 ASP.NET Core 5.0,并且有一个 Web API 应用程序部署到内部云,其中很少有设置(例如 DB)是通过主机云上的环境变量进行控制的。在我的 Startup.cs 中,我有以下代码

string projectDbConnection = Configuration.GetSection("ProjectDatabaseSettings").GetValue<string>("PROJECT_DB_CONNECTION");
string projectDbName = Configuration.GetSection("ProjectDatabaseSettings").GetValue<string>("PROJECT_DB_NAME");

据我了解,当在 IIS Express 本地运行时,它会查找应用程序设置。<Environment>.json 并且它们优先于 appsettings.json 值。

但是当我部署到我提到的云时,这个应用程序总是连接到错误的数据库PROJECT_DB_CONNECTION & PROJECT_DB_NAME作为应用程序的环境变量。 为了使应用程序从环境变量中读取,我必须将 Startup.cs 中的上述代码更改为

string projectDbConnection = Configuration.GetValue<string>("PROJECT_DB_CONNECTION");
string projectDbName = Configuration.GetValue<string>("PROJECT_DB_NAME");

我无法理解之间的区别GetSection.GetValue并且只是GetValue以及为什么我应该使用Configuration.GetValue()指示应用程序从环境变量中读取。

我缺少什么以及我们什么时候应该使用什么?


环境变量的命名

有一种环境变量的命名约定对于环境变量的嵌套应用程序设置,查看环境变量的命名 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0#naming-of-environment-variables。 层次结构中的每个元素都由双下划线分隔。

在您的情况下,如果您命名 env 变量,它将起作用:ProjectDatabaseSettings__PROJECT_DB_CONNECTION.

配置顺序

关于微软文档 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0检查配置源有一个顺序。

  • ChainedConfigurationProvider :添加现有 IConfiguration 作为源。在默认配置情况下,添加主机配置并将其设置为应用程序配置的第一个源。
  • appsettings.json 使用 JSON 配置提供程序。
  • appsettings.Environment.json使用 JSON 配置提供程序。例如,appsettings.Production.json 和 appsettings.Development.json。
  • 应用程序在开发环境中运行时的应用程序机密。
  • 环境变量使用环境变量配置提供程序。
  • 使用命令行配置提供程序的命令行参数。

用例

当您使用 appsettings.json 进行本地开发,但在生产中的集群或云中运行时,这非常有用,在这些环境中使用环境变量会更方便(例如:在 kubernetes 中,环境变量是通过配置映射设置的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

环境变量名称如何反映 appsettings.json 的结构 的相关文章

  • Linux 内核的静态调用图生成

    我正在寻找一个工具来静态生成 Linux 内核的调用图 对于给定的内核配置 生成的调用图应该是 完整的 即包含所有调用 包括潜在的间接调用 我们可以假设在 Linux 内核的情况下只能通过使用函数指针来完成调用 例如 这可以通过分析函数指针
  • pytest。使用堆叠参数化装饰器时定义预期结果的最佳方法?

    我有两个类似的测试用例 每个都有超过 100 行代码 这些代码为测试创建辅助对象 这些行非常相似 事实上 测试设置之间只有 2 行不同 我不想删除这些代码重复 我认为多个参数化可能会帮助我完成这项任务 使用多个参数化 我可以将设置组合起来
  • PHP会话文件权限

    我有文件index php
  • WebLogic 和 OSGi

    有没有办法在 Weblogic 应用程序服务器中运行 OSGi 容器 我知道它可以与 JBoss Glassfish 配合使用 并且可以将 Equinox servlet 桥添加到您的 OSGi 项目中 桥的实现太旧了 但我想要类似 JBo
  • npm install packagename --save-dev 不更新 package.json

    有没有简单或微妙的原因package json运行 save dev 后不会更新吗 这是我的命令 npm install modulename save dev 从项目的根目录运行 命令成功 新模块按预期显示在 node modules 目
  • 如何增加TabLayout中选项卡的图标大小

    我正在尝试增加应用程序中选项卡的图标大小 图标大小是固定的 尝试了很多方法 但没有任何效果 最后尝试了以下方法 但大小没有改变 如果有人能告诉我正确的方法 我会很高兴 提前致谢 这是我的代码 Toolbar toolbar Toolbar

随机推荐