我有一个带有.Net Core WebAPI后端的React SPA,该后端已部署到Azure App Service。在本地开发时,我使用appsettings.json文件配置WebAPI后端。我正在为名为“ XyzApi”的外部api设置键/值对。
{
"XyzApi": "https://somedomain/api"
}
在WebAPI控制器中,我使用配置提供程序访问此配置设置。
var xyzApiUrl = Configuration["XyzApi"]
这很好。
将应用程序部署到App Service时,我需要更改“ XyzApi”的值,以使用新值覆盖appsettings.json中的值。我在Azure的“应用服务应用程序设置”部分中添加了名为“ XyzApi”的键/值对。
在“应用程序设置的App Service”文档中,该值将作为名称为“ APPSETTING_XyzApi”的环境变量作为环境变量公开给配置。它还说应该覆盖来自appsettings.json文件的键“ XyzApi”的值。
应用启动时。问题是“ XyzApi”的值仍设置为appsettings.json文件中的值。它不会被覆盖。正如预期的那样,“ APPSETTING_XyzApi”现在有了一个新的键/值对。
Azure App Service为什么不使用在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();
});
}