我在我的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>()
进行映射?
我相信你在寻找这个:
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保存全局配置值,其他文件保存特定值。
看看ASP.NET Core Configuration with Environment Variables in IIS
要对环境变量执行相同操作,只需使用冒号(:)分隔级别,例如
HitchhikersGuideToTheGalaxy:MeaningOfLife
。
在您的情况下,您将使用问题中提到的ConnectionStrings:ElasticSearchUrl
。
另请注意以下事项:
然而,当您部署到IIS时,事情变得有点棘手,遗憾的是缺少使用IIS配置的文档。您将进入服务器的系统设置并配置所有环境变量。然后,您将应用程序部署到IIS,它......爆炸,因为它缺少必要的设置。
事实证明,为了在IIS中使用环境变量,您需要编辑App Pool的高级设置。在那里,您将找到一个名为“加载用户配置文件”的设置。将其设置为True。然后,回收App Pool以加载环境变量。注意:即使将环境变量添加为“系统变量”而不是“用户变量”,也必须执行此操作。