替换 appSettings.json 中的 .Net Core 变量以引用其他配置值

91d*_*ave 6 asp.net-core-mvc asp.net-core

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

{
   "GlobalSettings": {
        "BaseUrl": "http://example.com:5000"
    },
    "NavigationSettings": {
        "LoginUrl": "{GlobalSettings:BaseUrl}/Login"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

ReplaceConfigValues(this string input, IConfiguration config) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

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

即使在配置值中引用环境变量之类的东西也会很有用,但我也不知道有什么方法可以做到这一点。例如

"LoginUrl": "${ENV_GLOBAL_BASE_URL}/Login"
Run Code Online (Sandbox Code Playgroud)

Fab*_*ien 4

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

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

  • Foo = {Bar1}{Bar2}{Bar1}
  • Bar1 = 咖啡师
  • Bar2 = -吉恩-

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