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

如何用Fluent Validation实现文件上传必填校验(替代required属性)

用Fluent Validation实现文件选择的强制性校验

我来帮你搞定这个问题!你当前的校验逻辑只处理了已上传文件的规则,但完全没覆盖“用户未选择任何文件”的场景。要替代input[type='file']的required属性,只需要在UploaderValidator中添加对Files集合的非空校验即可,具体步骤如下:

修改UploaderValidator类

直接在你的UploaderValidator构造函数里,先添加一条针对Files集合的非空校验规则,再保留原有的逐个文件校验:

public class UploaderValidator : AbstractValidator<FileUploadViewModel> { 
    public UploaderValidator() { 
        // 核心:校验Files集合不能为空/没有任何元素
        RuleFor(x => x.Files)
            .NotEmpty()
            .WithMessage("请至少选择一个文件"); // 自定义提示信息

        // 原有:校验每个选中文件的规则
        RuleForEach(x => x.Files).SetValidator(x => new FileValidator()); 
    } 
}

规则说明

  • NotEmpty()会同时检查两种情况:Files为null,或者Files集合里没有任何元素(也就是用户没选文件)。
  • 搭配WithMessage()可以自定义友好的提示文本,比默认提示更贴合业务场景。

额外场景:单个文件上传的情况

如果你的视图模型是单个文件(而非集合),那对应的校验逻辑可以这么写:

public class SingleFileUploadValidator : AbstractValidator<SingleFileUploadViewModel> {
    public SingleFileUploadValidator() {
        // 校验文件是否被选择
        RuleFor(x => x.File)
            .NotNull()
            .WithMessage("请选择要上传的文件");

        // 校验文件大小(注意加When条件,避免文件为null时抛出空引用异常)
        RuleFor(x => x.File.Length)
            .LessThanOrEqualTo(100)
            .When(x => x.File != null);
    }
}

这样不管是单个还是多个文件上传,都能通过Fluent Validation实现服务器端的强制性文件选择校验,完全替代前端required属性的功能,还能保持前后端校验逻辑的一致性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:22:48