【发布时间】:2018-02-12 18:43:28
【问题描述】:
我在我的 API 中使用 .NET Core 1.1,但遇到了一个问题:
- 我需要有两个级别的配置:
appsettings.json和环境变量。 - 我想通过
IOptions将DI 用于我的配置。 - 我需要环境变量来覆盖
appsettings.json值。
所以到目前为止我都是这样做的:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables();
}
public IServiceProvider ConfigureServices(IServiceCollection services)
{
// Something here
services.Configure<ConnectionConfiguration>(options =>
Configuration.GetSection("ConnectionStrings").Bind(options));
// Something there
}
我的appsettings.json 是这样组成的
{
"ConnectionStrings": {
"ElasticSearchUrl": "http://localhost:4200",
"ElasticSearchIndexName": "myindex",
"PgSqlConnectionString": "blablabla"
}
}
我将所有配置映射到我的班级ConnectionConfiguration.cs。但是我也无法映射环境变量。我尝试了以下名称:ConnectionStrings:ElasticSearchUrl、ElasticSearchUrl,甚至尝试将前缀指定为 .AddEnvironmentVariables("ConnectionStrings"),但没有任何结果。
我应该如何命名环境变量以便它可以映射到services.Configure<TConfiguration>()?
【问题讨论】:
-
当您尝试将变量命名为“ConnectionStrings:ElasticSearchUrl”时,发生了什么?配置中的结果键是什么?您能理解这个问题中已接受答案的第二部分:*.com/questions/37873964/… 吗?
-
@lenkan,我从 EV 中什么也没得到,模型中充满了空值。我确实检查了文档的相同部分,但它对我没有帮助。其实我连刚才在
System.Environment.GetEnvironmentVariables()里面放的变量都看不到。 -
啊,所以真正的问题是您无法读取环境变量。这与 ConfigurationBuilder 无关。我会先尝试解决这个问题。
-
是的,我相信问题是因为我已经全部调试过了,一切都应该正常工作。路径还可以,即使
.GetSection也可以,但是变量非常错误(((
标签: c# .net environment-variables .net-core asp.net-core-1.1