Azure应用程序服务应用程序设置未覆盖appsettings.json值

Azure应用程序服务应用程序设置未覆盖appsettings.json值,azure,azure-web-app-service,azure-configuration,Azure,Azure Web App Service,Azure Configuration,我有一个React SPA,其中.Net核心WebAPI后端被部署到Azure应用程序服务。在本地开发时,我使用appsettings.json文件来配置WebAPI后端。我正在为一个名为“XyzApi”的外部api设置一个键/值对 在WebAPI控制器中,我使用配置提供程序访问此配置设置 var xyzApiUrl = Configuration["XyzApi"] public class Program { public static void Main(st

我有一个React SPA,其中.Net核心WebAPI后端被部署到Azure应用程序服务。在本地开发时,我使用appsettings.json文件来配置WebAPI后端。我正在为一个名为“XyzApi”的外部api设置一个键/值对

在WebAPI控制器中,我使用配置提供程序访问此配置设置

var xyzApiUrl = Configuration["XyzApi"]
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                var env = hostingContext.HostingEnvironment;

                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json",
                        optional: true, reloadOnChange: true)
                    .AddEnvironmentVariables(); 
            });
}
这个很好用

当我将应用程序部署到应用程序服务时,我需要更改“XyzApi”的值,以使用新值覆盖appsettings.json中的值。我在Azure的应用程序服务应用程序设置部分添加了一个名为“XyzApi”的密钥/值对

在应用程序设置的应用程序服务文档中,它表示该值将作为名为“APPSETTING_XyzApi”的环境变量公开给配置。它还表示应该覆盖appsettings.json文件中键“XyzApi”的值

当应用程序启动时。问题是“XyzApi”的值仍然设置为appsettings.json文件中的值。它没有被覆盖。正如所料,“APPSETTING_XyzApi”现在有了一个新的键/值对

为什么Azure应用程序服务没有使用Azure AppService应用程序设置中配置的新值覆盖appsettings.json文件中的键/值对

以下是配置配置提供程序的代码

var xyzApiUrl = Configuration["XyzApi"]
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            })
            .ConfigureAppConfiguration((hostingContext, config) =>
            {
                var env = hostingContext.HostingEnvironment;

                config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json",
                        optional: true, reloadOnChange: true)
                    .AddEnvironmentVariables(); 
            });
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateHostBuilder(args.Build().Run();
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.ConfigureAppConfiguration((hostingContext,config)=>
{
var env=hostingContext.HostingEnvironment;
config.AddJsonFile(“appsettings.json”,可选:true,reloadOnChange:true)
.AddJsonFile($“appsettings.{env.EnvironmentName}.json”,
可选:true,重载更改:true)
.AddenEnvironmentVariables();
});
}

除了门户中的appsettings'名称之外,您执行的所有步骤都是正确的。您可以在配置中添加
“APPSETTING\u XyzApi”
,这与
appsettings.json
中的
“XyzApi”
不同。只有在名称合适时,它才会覆盖

以下是一个例子:

1。我在本地的appsettings.json中设置了
“myKey”:“value1”
,并在我的索引页上显示该值。

2。发布后,我将
值设置为
123123

3。值覆盖:


抱歉,我不清楚,我正在将应用程序内的密钥服务正确设置为“XyxApi”。Azure在将键/值作为环境变量公开时正在添加“APPSETTING_389;”前缀。就是这样。它也应该覆盖appsettingd.json中的值,但它不是。实际上,您对这种覆盖有一些误解。appsettings.json的值不会被覆盖,因为此文件在本地工作,并且在appsettings中未配置任何内容时也可以工作。你的托管web应用程序中的值将被覆盖,就像我发布的测试图片一样。@MikeMurphyHi,@Mike Murphy,你介意接受我的回复作为其他人参考的答案吗?