#azure #azure-web-app-service #azure-configuration
#azure #azure-web-app-service #azure-конфигурация
Вопрос:
У меня есть React SPA с серверной частью .Net Core WebAPI, которая развертывается в службе приложений Azure. При локальной разработке я использую файл appsettings.json для настройки серверной части WebAPI. Я устанавливаю пару ключ / значение для внешнего API с именем «XyzApi».
{
"XyzApi": "https://somedomain/api"
}
В контроллере WebAPI я получаю доступ к этому параметру конфигурации с помощью поставщика конфигурации.
var xyzApiUrl = Configuration["XyzApi"]
Это работает нормально.
Когда я развертываю приложение в службе приложений, мне нужно изменить значение «XyzApi», чтобы переопределить значение из appsettings.json новым значением. Я добавил пару ключ / значение с именем «XyzApi» в разделе настроек приложения службы приложений в Azure.
В документации службы приложений для настроек приложения говорится, что значение будет доступно для конфигурации как переменная среды с именем «APPSETTING_XyzApi». В нем также говорится, что предполагается переопределить значение из файла appsettings.json для ключа «XyzApi».
Когда приложение запускается. Проблема в том, что значение для «XyzApi» по-прежнему равно значению из файла appsettings.json. Он НЕ переопределяется. И, как и ожидалось, теперь есть новая пара ключ / значение для «APPSETTING_XyzApi».
Почему служба приложений Azure не переопределяет пару ключ / значение из файла appsettings.json с новым значением, настроенным в настройках приложения Azure AppService.
Вот код, который настраивает поставщика конфигурации.
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();
});
}
Комментарии:
1. Привет, @Mike Murphy, не могли бы вы принять мой ответ в качестве ответа для других?
Ответ №1:
Все шаги, которые вы выполнили, верны, за исключением имени appsettings в portal. Вы добавляете "APPSETTING_XyzApi"
конфигурацию, которая отличается от "XyzApi"
in appsettings.json
. Это переопределит только в том случае, если имя подходит.
Вот пример:
1. Я устанавливаю "myKey": "value1"
в appsettings.json в local и показываю значение на своей индексной странице.
2. После публикации я устанавливаю value
значение 123123
:
3. Переопределение значения:
Комментарии:
1. Извините, я не понял, я правильно установил ключ в службе приложений на «XyxApi». Azure добавляет префикс «APPSETTING_» при отображении ключа / значения в качестве переменной среды. Он просто делает это. Также предполагается, что оно переопределяет значение из appsettingd.json, но это не так.
2. На самом деле у вас возникло некоторое недопонимание этого переопределения. Значение appsettings.json не будет переопределяться, поскольку этот файл работает локально и когда ничего не настроено в настройках приложения. Значение в вашем веб-приложении для хостинга будет переопределено, как и на тестовом изображении, которое я публикую. @MikeMurphy