appNettings.json中的.Net核心变量替换以引用其他配置值

时间:2017-07-18 17:30:05

标签: asp.net-core asp.net-core-mvc

想象一下以下appSettings.json文件:

{
   "GlobalSettings": {
        "BaseUrl": "http://example.com:5000"
    },
    "NavigationSettings": {
        "LoginUrl": "{GlobalSettings:BaseUrl}/Login"
    }
}

我想要做的是在GlobalSettings:BaseUrl的值内自动替换NavigationSettings:LoginUrl的值。我知道可以使用appSettings.{env}.json覆盖特定键,但这会覆盖整个值,而不仅仅是其中的一部分。

我可以通过使用类似下面的扩展方法来解决这个问题,但这需要程序员记住在可能想要替换配置值的任何地方调用扩展方法。 / p>

ReplaceConfigValues(this string input, IConfiguration config) { /*...*/ }

任何人都可以建议我可以使用的任何替代方法,或者是否有一些我可能会缺少的.Net Core功能?

即使是在配置值中引用环境变量之类的东西也会很有用,但我也不知道如何做到这一点。 E.g。

"LoginUrl": "${ENV_GLOBAL_BASE_URL}/Login"

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

尝试HOCON https://github.com/lightbend/config/blob/master/HOCON.md

{
   "GlobalSettings": {
        "BaseUrl": "http://example.com:5000"
    },
    "NavigationSettings": {
        "LoginUrl": "{GlobalSettings:BaseUrl}/Login"
    }
}

可以翻译成

"GlobalSettings": {
    "BaseUrl": "http://example.com:5000"
}

"NavigationSettings": {
    "LoginUrl": "${GlobalSettings.BaseUrl}/Login"
}

这是配置扩展名: https://github.com/akkadotnet/HOCON https://www.nuget.org/packages/Hocon.Extensions.Configuration/