Установка ключей в настройках приложения. json с переменными ENV - ASP. NET Core 3.1 Docker - PullRequest
1 голос
/ 04 марта 2020

У меня есть. NET Core Web API, и я пытаюсь выяснить, как использовать переменные ENV для настройки ключей в моем appsetttings.json, чтобы я мог заполнить данные при создании контейнера Docker.

До сих пор мне удалось внедрить IOptions<> в мой тестовый контроллер, и я смог отладить значения, которые были NULL, потому что приложение в данный момент еще не запущено в контейнере.

Test контроллер:

namespace TestWebApplication.Controllers
{
    [ApiController]
    [Route("api/")]
    public class TestController : ControllerBase
    {
        private readonly IOptions<EnvironmentConfiguration> _environmentConfiguration;

        public TestController(IOptions<EnvironmentConfiguration> environmentConfiguration)
        {
            _environmentConfiguration = environmentConfiguration;
        }

        [HttpGet]
        [Route("testmessage")]
        public ActionResult<string> TestMessage()
        {
            var test = _environmentConfiguration.Value;

            return Ok($"Value from EXAMPLE_1 is {test.EXAMPLE_1}");
        }
    }
}

Конфигурация среды:

namespace TestWebApplication.Models
{
    public class EnvironmentConfiguration
    {
        public string EXAMPLE_1 { get; set; }
        public string EXAMPLE_2 { get; set; }
     }
}

После изучения некоторых более старых руководств я заметил, что на самом деле мне никогда не нужно было вставлять какой-либо код в ConfigureServices, чтобы это работало.

Например, допустим, у меня есть эта часть моего appsettings.json:

"eureka": {
    "client": {
      ......
    },
    "instance": {
      "port": "xxxx",
      "ipAddress": "SET THIS WITH ENV",
    }
  }

Как я могу установить переменную окружения для заполнения ipAddress, когда я go в Docker , Я запускаю что-то вроде этого:

docker run .... -e EXAMPLE_1 -e IP_ADDRESS ....

1 Ответ

2 голосов
/ 04 марта 2020

Например, у вас есть раздел в appsettings.json:

{
    "Section1" : {
        "SectionA": {
            "PropA": "A",
            "PropB": "B"
        }
    }
}

и класс:

public class SectionA
{
    public string PropA { get; set; }
    public string PropB { get; set; }
}

В Startup.cs сопоставьте класс с разделом, чтобы можно было вводить IOptions<SectionA>:

services.Configure<SectionA>(Configuration.GetSection("Section1:SectionA"));

Затем вы можете переопределить свойства SectionA, используя это соглашение об именах для переменных среды: Section1__SectionA__PropA.

Также прочтите это https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#keys

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...