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

我的配置示例:

.net - 避免在appsettings中多次使用相同的网址-LMLPHP

.net - 避免在appsettings中多次使用相同的网址-LMLPHP

最佳答案



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

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

  • appsettings.json的常规配置
  • 来自appsettings.<environment>.json的特定于环境的配置
  • 开发用户密钥(如果在开发环境下运行)
  • 环境变量
  • 命令行参数

  • 以后出现的配置源可以覆盖以前的源中的值。因此,您可以在appsettings.json中指定一个很好的默认值,然后在appsettings.Production.json中将其覆盖为特定于环境的值。

    对于默认情况下合并的环境变量也是如此。您只需使用右键即可设置环境变量,然后将其覆盖您的appsettings文件中的值。

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

    由于冒号在环境变量中很难用作键,因此可以用两个下划线代替。因此,您可以设置用来覆盖您的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>();
    

    关于.net - 避免在appsettings中多次使用相同的网址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57230574/

    10-13 05:32