ASP.NET Core的json配置文件中的变量替换?

时间:2019-05-09 22:11:55

标签: asp.net-core

我要为我的ASP.NET Core项目使用JSON配置,如此处记录:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2

我的配置如下所示:

config
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{commandConfig["Site"]}.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables();

在每个appsettings.<site>.json中,我可以这样:

{
    "Site": "siteName1"
}

但这似乎是一种浪费。我要把它放在appsettings.json中:

{
    "Site": "$(Site)"
}

并让变量替换适当地替换$(Site)

像这样可能吗?

2 个答案:

答案 0 :(得分:2)

我为此目的创建了一个库,它完全符合您的期望。参见:https://github.com/molinch/ConfigurationSubstitutor 您只需要将其注册为另一个配置源即可。

例如,如果您在配置中定义了以下三个条目:

  • Foo = {Bar1} {Bar2} {Bar1}
  • Bar1 =咖啡师
  • Bar2 = -Jean-

从配置中请求Foo时,您将获得:Barista-Jean-Barista

答案 1 :(得分:1)

我不确定是否可行。

我建议使用环境变量:

var mySiteVariable = Environment.GetEnvironmentVariable("MySiteVariable");

config
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{mySiteVariable}.json", optional: true, reloadOnChange: true)
    .AddEnvironmentVariables();

更新:

如果您不想使用其他json文件,则可以使用AddInMemoryCollection。链中后期添加的配置将覆盖链中较早配置中的变量。

config.SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddInMemoryCollection(new Dictionary<string, string>()
    {
        {"MyConfigVariable", "overwrite with this value"}
    });

没有内置的方法可以执行所需的操作。如果您确实愿意,您总是可以自己读取和解析json文件。