如何检查.NET Core 中是否存在配置节?

How to check if Configuration Section exists in .NET Core?

如何检查 .NET Core 中的 appsettings.json 中是否存在配置部分?

即使某个部分不存在,下面的代码也总是return一个实例化的实例。

例如

var section = this.Configuration.GetSection<TestSection>("testsection");

查询Configuration的children是否有名字为"testsection"

var sectionExists = Configuration.GetChildren().Any(item => item.Key == "testsection"));

如果 "testsection" 存在,这应该 return 为真,否则为假。

自 .NET Core 2.0 起,您还可以调用 ConfigurationExtensions.Exists 扩展方法来检查某个部分是否存在。

var section = this.Configuration.GetSection("testsection");
var sectionExists = section.Exists();

GetSection(sectionKey) never returns null 以来,您可以安全地调用 Exists 其 return 值。

阅读 Configuration in ASP.NET Core 上的文档也很有帮助。

.Net 6中,有一个新的扩展方法:

ConfigurationExtensions.GetRequiredSection()

如果没有包含给定键的部分,则抛出 InvalidOperationException


此外,如果您将 IOptions 模式与 AddOptions<TOptions>() 一起使用,.Net 6 中还添加了 ValidateOnStart() 扩展方法,以便能够指定验证应该 运行 在启动时,而不是仅在解析 IOptions 实例时 运行ning。

你可以将它与 GetRequiredSection() 结合使用,以确保某个部分确实存在:

// Bind MyOptions, and ensure the section is actually defined.
services.AddOptions<MyOptions>()
    .BindConfiguration(nameof(MyOptions))
    .Validate<IConfiguration>((_, configuration)
        => configuration.GetRequiredSection(nameof(MyOptions)) is not null)
    .ValidateOnStart();