簡體   English   中英

使用 ENV 變量在 appsettings.json 中設置鍵 - ASP.NET Core 3.1 Docker

[英]Setting keys in appsettings.json with ENV variables - ASP.NET Core 3.1 Docker

我有一個 .NET Core Web API,我試圖找出如何使用 ENV 變量來配置我的appsetttings.json鍵,這樣我就可以在創建 Docker 容器時填充數據。

到目前為止,我已經成功地將IOptions<>注入到我的測試控制器中,並且我能夠調試這些值為 NULL 的值,因為該應用程序目前還沒有在容器中運行。

測試控制器:

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所以當我去 Docker 時,我運行如下:

docker run .... -eEXAMPLE_1 -e IP_ADDRESS ....

例如,您在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM