.NET Core 中的环境变量配置

Vla*_*lin 6 .net c# environment-variables .net-core asp.net-core-1.1

我在我的 API 中使用了 .NET Core 1.1,但遇到了一个问题:

  1. 我需要有两个级别的配置:appsettings.json和环境变量。
  2. 我想通过DI用于我的配置IOptions
  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
}
Run Code Online (Sandbox Code Playgroud)

用我这样的appsettings.json作曲

{
    "ConnectionStrings": {
        "ElasticSearchUrl": "http://localhost:4200",
        "ElasticSearchIndexName": "myindex",
        "PgSqlConnectionString": "blablabla"
    }
}
Run Code Online (Sandbox Code Playgroud)

我将所有配置映射到我的类ConnectionConfiguration.cs。但是我也无法映射环境变量。我尝试了以下名称:ConnectionStrings:ElasticSearchUrl, ElasticSearchUrl,甚至尝试指定前缀 to.AddEnvironmentVariables("ConnectionStrings")没有任何结果。

我应该如何命名环境变量以便它可以被映射services.Configure<TConfiguration>()

Dan*_*iel 23

分隔:符不适用于所有平台上的环境变量分层键。__,双下划线,受所有平台支持,并自动替换为:

尝试像这样命名环境变量ConnectionStrings__ElasticSearchUrl

来源


Jac*_*man 7

查看IIS 中环境变量的 ASP.NET Core 配置

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

ConnectionStrings:ElasticSearchUrl在您的情况下,您将按照问题中提到的方式使用。

另请注意以下事项:

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

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

  • 谢谢你的回答,我陷入了无限循环,你却逃脱了我! (3认同)