避免在应用程序设置中多次使用相同的 url

Avoid using multiple time the same url in the appsettings

我有一个微服务解决方案和每个项目三个应用程序设置,问题是我有很多次相同的 URL 并且每次都很难在任何地方更改它,所以我想知道我是否可以替换这些URLs 带有环境变量或类似的东西,所以如果只需要一次,我可以更改 URL。

我的配置示例:

有几种方法可以做到这一点。

共享配置

您可以在父级别创建共享配置,并在启动时将其加载到每个项目中。您可以在此处找到有关以及如何实施的更多信息 Shared Config

外部配置存储模式

更好的方法,尤其是在产品中,您可以将配置保存在外部存储中,例如 Azure Key Vault 或 Azure App configuration

so I wonder if I can replace these URLs with an environment variable or something like that

是的,你完全可以做到!事实上,默认的 WebHostBuilder(以及从 3.0 开始的 HostBuilder)实际上以使用多个配置源的方式设置配置。

将按顺序读取以下应用程序配置源 by default

  1. 来自 appsettings.json
  2. 的常规配置
  3. 来自 appsettings.<environment>.json
  4. 的环境特定配置
  5. 开发用户机密(如果运行在开发环境下)
  6. 环境变量
  7. 命令行参数

后来出现的配置来源可以覆盖早期来源的值。这就是为什么您可以在 appsettings.json 中指定一个好的默认值,并在 appsettings.Production.json.

中为特定于环境的值覆盖它

环境变量也是如此,默认并入。您可以使用 右键 设置环境变量,然后将覆盖您的应用程序设置文件中的值。

例如,要覆盖示例中的 IdentityServerBaseUrl,您必须首先考虑该设置的完整配置路径是什么。对于 JSON 配置,您基本上必须使用冒号将每个键组合到实际值。所以在这种情况下,配置路径将是 AdminConfiguration:IdentityServerBaseUrl.

因为冒号在环境变量中作为key有点难用,可以用两个下划线代替。因此,您可以设置为覆盖 appsettings 文件中的值的环境变量是 AdminConfiguration__IdentityServerBaseUrl:

set AdminConfiguration__IdentityServerBaseUrl=http://10.0.75.1:5000

同样适用于文件中的所有配置值。

您还可以扩展默认配置设置并添加其他配置提供程序。例如,您可以添加 另一个 文件,例如appsettings.global.json 其中包含适用于所有应用程序的配置值,然后您可以在所有应用程序之间共享这些配置值。为此,您只需扩展默认构建器:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(config =>
        {
            config.AddJsonFile("appsettings.global.json", optional: true);
        })
        .UseStartup<Startup>();

您可以使用这个 nuget 包,它允许您在多个键中使用相同的值 https://www.nuget.org/packages/TemplateFormattedConfiguration/