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

w1jd8yoj  于 2023-11-20  发布在  .NET
关注(0)|答案(4)|浏览(145)

如何检查.NET Core中的appsettings.json中是否存在配置节?
即使节不存在,以下代码也将始终返回示例化的示例。
例如

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

字符串

mrfwxfqh

mrfwxfqh1#

从.NET Core 2.0开始,您还可以调用扩展名扩展名扩展方法来检查节是否存在。

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

字符串
由于GetSection(sectionKey)never returns null,您可以安全地调用Exists的返回值。
Configuration in ASP.NET Core上阅读此文档也很有帮助。

8e2ybdfx

8e2ybdfx2#

查询Configuration的子项,并检查是否有名称为“testsection”的子项

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

字符串
如果“testsection”存在,则返回true,否则返回false。

qlfbtfca

qlfbtfca3#

在**.Net 6**中,有一个新的扩展方法:
ConfigurationExtensions.GetRequiredSection()
如果没有给定键的节,则抛出InvalidOperationException
此外,如果您将IOptions模式与AddOptions<TOptions>()一起使用,则.Net 6中还添加了ValidateOnStart()扩展方法,以便能够指定验证应在启动时运行,而不是仅在IOptions示例解析时运行。
您可以通过合并与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();

字符串

yc0p9oo0

yc0p9oo04#

也可以使用DataAnnotations

builder.Services.AddOptions<AppSettings>()
    .BindConfiguration(nameof(AppSettings))
    .ValidateDataAnnotations()//👈
    .ValidateOnStart();

字符串
这将确保数据注解工作:

using System.ComponentModel.DataAnnotations;

public class AppSettings()
{
    [Required]
    public required string MyProperty { get; set; }
}


仅当AppSettingsMyProperty被设置时才有效:

"AppSettings":{
    "MyProperty ":"non-empty string"
  }

相关问题