.NET Core中的环境变量配置

问题描述 投票:1回答:2

我在我的API中使用.NET Core 1.1并遇到问题:

  1. 我需要有两个级别的配置:appsettings.json和环境变量。
  2. 我想通过IOptions将DI用于我的配置。
  3. 我需要环境变量来覆盖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:ElasticSearchUrlElasticSearchUrl,甚至尝试指定.AddEnvironmentVariables("ConnectionStrings")的前缀而没有任何结果。

我应该如何命名环境变量,以便可以使用services.Configure<TConfiguration>()进行映射?

c# .net environment-variables .net-core asp.net-core-1.1
2个回答
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个配置

  1. DEV-决赛
  2. DEV-地方
  3. DEV-测试

和4 * .json文件

  • appsettings.json
  • appsettnigs.dev-final.json
  • appsettings.dev-local.json
  • appsettings.dev-test.json

appsettings.json保存全局配置值,其他文件保存特定值。


0
投票

看看ASP.NET Core Configuration with Environment Variables in IIS

要对环境变量执行相同操作,只需使用冒号(:)分隔级别,例如HitchhikersGuideToTheGalaxy:MeaningOfLife

在您的情况下,您将使用问题中提到的ConnectionStrings:ElasticSearchUrl

另请注意以下事项:

然而,当您部署到IIS时,事情变得有点棘手,遗憾的是缺少使用IIS配置的文档。您将进入服务器的系统设置并配置所有环境变量。然后,您将应用程序部署到IIS,它......爆炸,因为它缺少必要的设置。

事实证明,为了在IIS中使用环境变量,您需要编辑App Pool的高级设置。在那里,您将找到一个名为“加载用户配置文件”的设置。将其设置为True。然后,回收App Pool以加载环境变量。注意:即使将环境变量添加为“系统变量”而不是“用户变量”,也必须执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.