如何获得对Azure App Service中的配置的早期访问?

问题描述 投票:0回答:1

我有一个应用程序,它将使用我构建的一些外部微服务。该应用程序和微服务托管在Azure App Services上。在Startup类中需要微服务的功能,因此我正在尽早注册这些依赖项(在创建IWebHostBuilder时)。微服务还取决于配置值(由应用程序提供),因此在创建IOptions以从IWebHostBuilder获取设置的同时,我也在进行appsettings.json模式配置。该设置文件包含将在所有环境中使用的设置,以及一些特定于环境的设置。我打算使用文件中的设置进行本地开发,并使用App Service上的“配置”刀片覆盖特定于环境的设置。在我构建的其他应用程序中,“配置”刀片服务器设置的确覆盖了appsettings.json中的值。

[但是,当您进行早期配置时,如下面的代码所示,App Service无法覆盖设置,因此最终我的本地开发设置最终在App Service中使用(因此,所有操作都崩溃了)。我在黑暗中拍照,并将特定于环境的设置从appsettings.json中移出,并使用不同的名称移入了自己的JSON文件。现在,我只是尽早加载该文件。这没有解决我的问题。

所以我的问题是,在Startup之前有哪些可用的配置设置,但仍然能够覆盖Azure App Services中的设置?我搜寻了有关.NET Core配置的文档,但是有太多的选择和方法使它们困扰我。我目前正在使用.NET Core 2.2。预先感谢!

internal static class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args)
            .Build()
            .Run();
    }

    private static IWebHostBuilder CreateWebHostBuilder(string[] args)
    {
        return WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, builder) => { builder.AddEarlyRequiredConfiguration(); })
            .ConfigureServices((context, services) => { services.AddEarlyRequiredServices(context); })
            .UseStartup<Startup>();
    }

    private static void AddEarlyRequiredServices(this IServiceCollection services, WebHostBuilderContext context)
    {
        // This extension method is in a separate assembly, and registers the microservices.
        // It also configures the IOptions stuff for the configuration values.
        services.AddMyMicroservices(context);
    }

    private static void AddEarlyRequiredConfiguration(this IConfigurationBuilder builder)
    {
        builder.AddJsonFile("appsettings.json");
    }
}
azure asp.net-core .net-core azure-web-sites
1个回答
0
投票

如果有一个答案,请随时发布更好的答案。这可能并不完美,但这是我最终处理它的方式。

我以建议的appsettings.{Environment}.json格式创建设置文件。我没有使用Microsoft开箱即用的环境名称(开发,登台,生产)。相反,我根据组织环境对它们进行了自定义。在launchSettings.json中,我为ASPNETCORE_ENVIRONMENT环境变量设置了一个值,该值指示我的本地开发环境。在App Services上,我将同一环境变量设置为具有与这些环境相关的值。由于早期注册时appsettings.json中的所有内容都将被[[not覆盖,因此我将需要覆盖的所有设置都放入了这些环境特定的文件中。我只想在App Service配置中指定的任何设置,我都完全忽略了设置文件。最后,我更改了早期注册方法,如下所示:

private static void AddEarlyRequiredConfiguration( this IConfigurationBuilder builder, WebHostBuilderContext context) { builder.AddJsonFile("appsettings.json"); builder.AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json"); } }
我只是确保在appsettings.jsonappsettings.{Environment}.json和App Service配置之间,没有重复的设置。这样,我就可以根据需要尽早注册设置,但是这三层中的任何一层都不必覆盖。
© www.soinside.com 2019 - 2024. All rights reserved.