首页 > 解决方案 > Azure 应用服务应用程序设置不覆盖 appsettings.json 值

问题描述

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

{
  "XyzApi": "https://somedomain/api"
}

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

var xyzApiUrl = Configuration["XyzApi"]

这工作正常。

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

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

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

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

这是配置配置提供程序的代码。

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(); 
            });
}

标签: azureazure-web-app-serviceazure-configuration

解决方案


您所做的所有步骤都是正确的,除了门户中的 appsettings名称。您添加"APPSETTING_XyzApi"配置,这与 "XyzApi"in不同appsettings.json。仅当名称适合时才会覆盖。

这是一个例子:

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

在此处输入图像描述

![在此处输入图像描述

2.发布后,我设置value123123 ![在此处输入图像描述

3.值覆盖:

在此处输入图像描述


推荐阅读