首页 > 解决方案 > 如何在同一个 appsettings.json 中引用另一个键

问题描述

我想知道是否有办法在 ASP.NET/Core 项目中引用同一 appsettings.json 中的另一个键。

在下面的示例中,我想知道是否可以在“DefaultConnection”中引用“DBName”键,因为它们共享相同的值:

{ "DBName": "MyDbName",

"ConnectionStrings": { "DefaultConnection": "server=localhost;port=3306;user=username;database="MyDbName";" } }

标签: asp.netjsonasp.net-mvcasp.net-web-apiasp.net-core

解决方案


不,这是不可能的。配置值只是字符串。它们不会被解析为变量之类的东西。我想你可以通过以下方式解决这个问题:

{
    "DBName": "MyDbName",
    "ConnectionStrings": {
        "DefaultConnection": "server=localhost;port=3306;user=username;database={0}"
    }
}

然后:

var connectionString = string.Format(Configuration.GetConnectionString("DefaultConnection"), Configuration["DbName"]);

本质上,您在实际连接字符串值中保留一个string.Format占位符,然后通过您的DbName配置值手动替换它。

但是,这很脆弱。老实说,你一开始就没有这样做。配置可以被环境覆盖。因此,如果您需要执行诸如切换数据库名称之类的操作,您可能处于不同的环境中,因此应该通过环境变量或特定于环境的 JSON 覆盖连接字符串值。


推荐阅读