如何从 ASP.NET Core 3.1 中的 appsettings.json 读取整个部分?

mot*_*deh 2 c# appsettings .net-core asp.net-core

我想从 appsettings.json 获取整个部分。

这是我的 appsettings.json:

{
 "AppSettings": {
  "LogsPath": "~/Logs",
  "SecondPath": "~/SecondLogs"
  } 
}
Run Code Online (Sandbox Code Playgroud)

C#:

var builder = new ConfigurationBuilder()
           .SetBasePath(Directory.GetCurrentDirectory())
           .AddJsonFile(this.SettingsFilesName);
        configuration = builder.Build();
Run Code Online (Sandbox Code Playgroud)

此语法工作正常并返回 "~/Logs" :

configuration.GetSection("AppSettings:LogsPath");
Run Code Online (Sandbox Code Playgroud)

但是我怎么能拥有所有的“AppSettings”部分?是否可以?

此语法不起作用并且 value 属性为 null。

 configuration.GetSection("AppSettings");
Run Code Online (Sandbox Code Playgroud)

更新

我没有模型并在课堂上阅读它。我正在寻找这样的东西:

 var all= configuration.GetSection("AppSettings");
Run Code Online (Sandbox Code Playgroud)

并像使用它一样

all["LogsPath"] or  all["SecondPath"]
Run Code Online (Sandbox Code Playgroud)

他们把他们的价值观还给我。

Nko*_*osi 6

那是设计使然

var configSection = configuration.GetSection("AppSettings");
Run Code Online (Sandbox Code Playgroud)

configSection不具有价值,只有一个键和一个路径。

GetSection返回匹配部分时,Value不会填充。AKeyPath部分存在时返回。

例如,如果您定义了一个模型来将截面数据绑定到

class AppSettings {
    public string LogsPath { get; set; }
    public string SecondPath{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并绑定到该部分

AppSettings settings = configuration.GetSection("AppSettings").Get<AppSettings>();
Run Code Online (Sandbox Code Playgroud)

您会看到整个部分将被提取并填充模型。

这是因为在基于匹配属性名称与该部分中的键填充模型时,该部分将遍历其子项并提取它们的值。

var configSection = configuration.GetSection("AppSettings");

var children = configSection.GetChildren();
Run Code Online (Sandbox Code Playgroud)

ASP.NET Core 中的参考配置