You need to enable JavaScript to run this app. 如何重构空值或空字符串校验代码 使其更精简整洁?
优惠活动
大模型
产品
解决方案
定价
更多

如何重构空值或空字符串校验代码 使其更精简整洁?

方案1:使用ASP.NET Core内置数据注解校验(最推荐,零冗余代码)

你只需要在Account模型的对应属性上加[Required]注解即可,框架会自动完成校验,校验失败会自动返回400 BadRequest,不需要手动写任何判断逻辑:

public class Account
{
    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Nationality is required")]
    public string Nationality { get; set; }

    [Required(ErrorMessage = "Phone is required")]
    public string Phone { get; set; }
    // 其余7个属性同理加对应注解即可
}

ASP.NET Core 2.0+版本默认已经开启了自动模型校验,只要接口参数上加[FromBody]等绑定特性即可,原有接口里的所有校验代码都可以完全删掉:

public IActionResult CreateAccount([FromBody] Account account)
{
    // 不需要写任何空校验代码,框架校验不通过会自动返回400
    // 直接写后续业务逻辑即可
}

如果是旧版本或者手动关闭了自动校验,也只需要加一行判断即可:

if (!ModelState.IsValid) return BadRequest(ModelState);

方案2:遍历校验规则集合(适合自定义校验场景)

如果不想用数据注解,或者有自定义的特殊校验规则,可以把需要校验的属性和对应的错误提示封装成元组集合,统一遍历判断,10个属性也只需要不到10行核心代码:

var validationRules = new List<(Func<string> valueGetter, string errorMessage)>
{
    (() => account.Name, "Name is required"),
    (() => account.Nationality, "Nationality is required"),
    (() => account.Phone, "Phone is required"),
    // 其余7个属性直接加一行到这个集合里即可
};

foreach (var rule in validationRules)
{
    if (string.IsNullOrEmpty(rule.valueGetter()))
    {
        return BadRequest(rule.errorMessage);
    }
}

这个方案的好处是所有校验规则统一维护,新增校验项只需要加一行到集合里,不需要重复写if判断逻辑。

方案3:使用FluentValidation库(适合复杂校验场景)

如果你的校验规则比较复杂,除了非空还有长度、格式、跨字段关联校验等需求,可以用FluentValidation库,实现校验逻辑和业务逻辑完全分离:
首先定义校验器:

public class AccountValidator : AbstractValidator<Account>
{
    public AccountValidator()
    {
        RuleFor(x => x.Name).NotEmpty().WithMessage("Name is required");
        RuleFor(x => x.Nationality).NotEmpty().WithMessage("Nationality is required");
        RuleFor(x => x.Phone).NotEmpty().WithMessage("Phone is required");
        // 其余属性直接加校验规则即可
    }
}

在Program.cs里注册全局自动校验后,接口里同样不需要写任何校验代码,框架会自动触发校验返回错误信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 03:06:01