Как заменить элементы списка в пользовательском файле appsettings.json?

У меня есть собственные файлы appsettings.json для каждой среды, поэтому appsettings.Dev.json, appsettings.Test.json, appsettings.Prod.json. В основном appsettings.json у меня есть следующий код:

  "EmailSettings": {
    "Recipients": [
      "[email protected]"
    ]
  }

Затем в пользовательском файле json я хочу переопределить этот список, например:

  "EmailSettings": {
    "Recipients": [
      "[email protected]"
    ]
  }

Но вместо этого это добавляется так:

  "EmailSettings": {
    "Recipients": [
      "[email protected]",
      "[email protected]"
    ]
  }

Со всеми другими типами настроек они заменяются, но по какой-то причине кажется, что вместо них добавляются списки в файлах пользовательских настроек. С .net у вас было больше детализации с xslt, чтобы иметь возможность определить, хотите ли вы заменить или добавить переопределенные настройки. Любые предложения здесь?

РЕШЕНИЕ (для меня)

Я сделал это, и он заменяется в пользовательских настройках json. Основной appsettings.json:

  "EmailSettings": {
    "Recipients:0": "[email protected]"
  }

Затем в файле пользовательских настроек:

  "EmailSettings": {
    "Recipients:0": "[email protected]"
  }

Спасибо за ответы!


person gabs    schedule 30.01.2019    source источник
comment
Вы можете указать адреса электронной почты через запятую: "Recipients":"email1,email2" вместо массива.   -  person Slava Utesinov    schedule 30.01.2019
comment
Тоже хороший вариант, спасибо!   -  person gabs    schedule 31.01.2019


Ответы (2)


В appsettings.Test.json используйте следующее

"EmailSettings:Recipients:0" : "[email protected]"

API конфигурации может поддерживать иерархические данные конфигурации, выравнивая иерархические данные с помощью разделителя в ключах конфигурации.

Вам нужно будет определить класс настроек электронной почты, например

   public class EmailSettings
    {
        public List<string> Recipients { get; set; }
    }

и подключите DI, чтобы добавить параметры в метод Configure в классе Startup

public void ConfigureServices(IServiceCollection services)
        {
            // add Options
            services.AddOptions();
            services.Configure<EmailSettings>(Configuration.GetSection("EmailSettings"));
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        }
person Abhinav Galodha    schedule 30.01.2019
comment
Я получаю это: EmailSettings: {Recipients: [[email protected]]}, EmailSettings:Recipients:0: [email protected] - person gabs; 30.01.2019
comment
@gabs, я не понял, что вы упомянули в комментариях, не могли бы вы уточнить? - person Abhinav Galodha; 30.01.2019
comment
Хорошо, похоже, он не заменяет его в пользовательском файле json, он просто добавляет его в конец. Я только что увидел, что вы добавили больше деталей выше, спасибо, я попробую :) - person gabs; 31.01.2019
comment
Хорошо, я понял, что мне нужно было сделать, благодаря вашей помощи :) Кажется, мне нужно было объявить настройки так же, как в основном appsettings.json, так и в пользовательских настройках, чтобы он был заменен! Добавлю в основную часть. - person gabs; 31.01.2019
comment
Рад, что смог помочь. - person Abhinav Galodha; 31.01.2019

Я использовал разные appsettings файлы для сред (включая Development)

Поэтому сначала убедитесь, что вы добавили JSON-файл среды в свою конфигурацию:

config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{EnvironmentName}.json", optional: true, reloadOnChange: true)

Тогда в моем исходном appsettings.json это будет что-то вроде:

"EmailSettings": {
    "Recipients": []
}

а затем для локальной разработки (среда Development): appsettings.Development.json

"EmailSettings": {
    "Recipients": [
        "[email protected]"
    ]
}

а затем для другой среды (назовем ее Staging): appsettings.Staging.json

"EmailSettings": {
    "Recipients": [
        "[email protected]"
    ]
}

Затем просто убедитесь, что в дополнительных средах вы установили ASPNETCORE_ENVIRONMENT в переменных среды.

person weeksdev    schedule 30.04.2021