如何通过 FluentValidation 验证上传的文件

far*_*izi 2 model-view-controller file-upload fluentvalidation asp.net-core

如何使用 FluentValidation 验证上传的文件?

      <input type="file" asp-for="Files" multiple />

Run Code Online (Sandbox Code Playgroud)

小智 10

ViewModel必须有public IList<IFormFile> Files { get; set; }

    public class CustomViewModel
    {
        public IList<IFormFile> Files { get; set; }
        ...
    }
Run Code Online (Sandbox Code Playgroud)

您必须为IFormFile类型创建一个验证器,如下所示:

    public class FileValidator : AbstractValidator<IFormFile>
    {
        public FileValidator()
        {
            RuleFor(x => x.Length).NotNull().LessThanOrEqualTo(100)
                .WithMessage("File size is larger than allowed");

            RuleFor(x => x.ContentType).NotNull().Must(x => x.Equals("image/jpeg") || x.Equals("image/jpg") || x.Equals("image/png"))
                .WithMessage("File type is larger than allowed");

               ...
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在你可以使用FileValidator你的CustomValidator是这样的:

    public class CustomValidator : AbstractValidator<CustomViewModel>
    {
        public CustomValidator()
        {
            RuleForEach(x => x.Files).SetValidator(new FileValidator());
        }
    }
Run Code Online (Sandbox Code Playgroud)