避免在应用程序设置中多次使用相同的 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:
- 来自
appsettings.json
的常规配置
- 来自
appsettings.<environment>.json
的环境特定配置
- 开发用户机密(如果运行在开发环境下)
- 环境变量
- 命令行参数
后来出现的配置来源可以覆盖早期来源的值。这就是为什么您可以在 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/
我有一个微服务解决方案和每个项目三个应用程序设置,问题是我有很多次相同的 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:
- 来自
appsettings.json
的常规配置
- 来自
appsettings.<environment>.json
的环境特定配置
- 开发用户机密(如果运行在开发环境下)
- 环境变量
- 命令行参数
后来出现的配置来源可以覆盖早期来源的值。这就是为什么您可以在 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/