【问题标题】:Azure App Service Application Settings not overriding appsettings.json valuesAzure 应用服务应用程序设置不覆盖 appsettings.json 值
【发布时间】:2020-11-05 21:15:11
【问题描述】:

我有一个 React SPA,其中 .Net Core WebAPI 后端部署到 Azure 应用服务。在本地开发时,我使用 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(); 
            });
}

【问题讨论】:

  • 嗨,@Mike Murphy,您愿意接受我的回复作为其他人参考的答案吗?

标签: azure azure-web-app-service azure-configuration


【解决方案1】:

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

这是一个例子:

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

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

3.值覆盖:

【讨论】:

  • 对不起,我不清楚,我正确地将应用服务中的密钥设置为“XyxApi”。 Azure 在将键/值公开为环境变量时添加了“APPSETTING_”前缀。它就是这样做的。它也应该覆盖 appsettingd.json 中的值,但不是。
  • 其实你对这个覆盖有一些误解。 appsettings.json 的值不会被覆盖,因为此文件在本地工作并且在应用程序设置中未配置任何内容时。您的托管网络应用程序中的值将被覆盖,就像我发布的测试图片一样。@MikeMurphy
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多