如何使用AddKeyPerFile

时间:2019-06-12 15:50:10

标签: c# asp.net-core configuration-files

我有一个ASP Net Core项目,我正在kubernetes集群中的linux容器内部署它。我的机密安装在容器的/ secrets文件夹中,我发现https://github.com/aspnet/Configuration/tree/master/src/Config.KeyPerFile并尝试使用builder.AddKeyPerFile("/secrets", false);来加载机密。但这行不通。 configuration [“ File1”]返回空,其中File1是“ / secrets”文件夹中的文件,其中包含一个秘密。

当我在服务代码中执行以下操作时,我就能读取机密。

List<KeyValuePair<string, string>> secrets =
    new List<KeyValuePair<string, string>>();

foreach (var secretFile in Directory.GetFiles("/secrets", "*.*", System.IO.SearchOption.AllDirectories))
{
    secrets.Add(
        new KeyValuePair<string, string>(
        Path.GetFileName(secretFile), File.ReadAllText(secretFile)));
}

我正在尝试找出如何使用builder.AddKeyPerFile扩展方法。

1 个答案:

答案 0 :(得分:2)

我正在使用.Net Core 3.1,它可以工作。

new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
    .AddJsonFile("appsettings.Development.json", optional: true)
    .AddKeyPerFile("/secret/", optional: true)
    .Build();

所以我可以通过以下方式访问存储的机密:

var file1 = configuration["File1"];

我还没有尝试使用.Net Core的旧版本,但是肯定可以在3.1版本上使用。我碰到的唯一事情是路径必须是绝对的。