You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何简便校验CosmosDbSettings类所有属性非空或非空字符串

方案1:使用.NET 内置数据注解 + 配置验证(最推荐)

这是.NET原生支持的方案,无需引入第三方依赖,还支持启动时校验,避免运行时才发现配置错误。
首先给CosmosDbSettings的属性添加数据注解:

using System.ComponentModel.DataAnnotations;

public class CosmosDbSettings
{
    [Required(AllowEmptyStrings = false)]
    public string Database { get; set; }

    [Required(AllowEmptyStrings = false)]
    public string Collection { get; set; }

    [Required(AllowEmptyStrings = false)]
    public string Instance { get; set; }

    [Required(AllowEmptyStrings = false)]
    public string Key { get; set; }
}

如果你用.NET的选项模式注册配置,可直接在注册时开启验证:

// Program.cs 中注册配置
builder.Services.AddOptions<CosmosDbSettings>()
    .Bind(builder.Configuration.GetSection("DatabaseSettings"))
    .ValidateDataAnnotations()
    .ValidateOnStart(); // 应用启动时就执行校验,提前发现问题

如果是手动校验实例,可直接调用Validator类实现:

public bool CheckCosmosSettingsValid(CosmosDbSettings settings)
{
    var validationContext = new ValidationContext(settings);
    var errorResults = new List<ValidationResult>();
    // validateAllProperties设为true才会校验所有属性
    return Validator.TryValidateObject(settings, validationContext, errorResults, validateAllProperties: true);
}

如果需要获取具体哪个属性校验失败,遍历errorResults即可。

方案2:反射实现通用字符串属性校验

如果你的场景不适合用数据注解,或者需要通用校验逻辑适配多个配置类,可以用反射写扩展方法,一次编写所有字符串属性的配置类都能复用,后续新增属性也不用调整校验代码:

using System.Reflection;

public static class ValidationExtension
{
    public static bool AllStringPropertiesNotEmpty(this object obj)
    {
        // 先校验实例本身是否为空
        if (obj == null) return false;

        // 取当前类所有公共字符串类型的实例属性
        var stringProps = obj.GetType()
            .GetProperties(BindingFlags.Public | BindingFlags.Instance)
            .Where(p => p.PropertyType == typeof(string));

        foreach (var prop in stringProps)
        {
            var value = (string)prop.GetValue(obj);
            if (string.IsNullOrEmpty(value))
            {
                // 这里如果需要可以抛出异常,或记录错误的属性名
                return false;
            }
        }
        return true;
    }
}

调用方式非常简单:

bool isValid = myClassInstance.DatabaseSettings.AllStringPropertiesNotEmpty();

方案3:FluentValidation 第三方库实现

如果项目已经引入了FluentValidation做校验,用这个方案可以和现有校验逻辑统一风格,后续如果要加更复杂的校验规则(比如Instance必须是合法URL、Key长度符合要求)也很方便扩展:

using FluentValidation;

public class CosmosDbSettingsValidator : AbstractValidator<CosmosDbSettings>
{
    public CosmosDbSettingsValidator()
    {
        RuleFor(x => x.Database).NotEmpty();
        RuleFor(x => x.Collection).NotEmpty();
        RuleFor(x => x.Instance).NotEmpty();
        RuleFor(x => x.Key).NotEmpty();
    }
}

校验调用:

var validator = new CosmosDbSettingsValidator();
var validateResult = validator.Validate(myClassInstance.DatabaseSettings);
bool isValid = validateResult.IsValid;

内容的提问来源于stack exchange,提问作者ZZZSharePoint

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 22:15:06