[英]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.