我在我的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>()
?
答案 0 :(得分:2)
:
分隔符不适用于所有平台上的环境变量层次结构键。所有平台均支持__
(双下划线),并且会自动将其替换为:
尝试像这样ConnectionStrings__ElasticSearchUrl
答案 1 :(得分:0)
我相信你正在寻找这个:
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
this.Configuration = builder.Build();
我有3个配置
和4 * .json文件
appsettings.json保存全局配置值,其他文件保存特定值。
答案 2 :(得分:0)
查看ASP.NET Core Configuration with Environment Variables in IIS
要对环境变量执行相同操作,只需使用冒号(:)分隔级别,例如
HitchhikersGuideToTheGalaxy:MeaningOfLife
。
在您的情况下,您将使用问题中提到的ConnectionStrings:ElasticSearchUrl
。
另请注意以下事项:
然而,当您部署到IIS时,事情变得有点棘手,遗憾的是缺少使用IIS配置的文档。您将进入服务器的系统设置并配置所有环境变量。然后,您将应用程序部署到IIS,它......爆炸,因为它缺少必要的设置。
事实证明,为了在IIS中使用环境变量,您需要编辑应用程序池的高级设置。在那里,您会找到一个名为“加载用户个人资料”的设置。将其设置为 True 。然后,回收App Pool以加载环境变量。注意:即使将环境变量添加为“系统变量”而不是“用户变量”,也必须执行此操作。