FluentValidation is a .NET library for building strongly-typed validation rules.

FluentValidation 11 supports the following platforms:

For automatic validation with ASP.NET, FluentValidation supports ASP.NET running on .NET Core 3.1, .NET 5 or .NET 6.

If you’re new to using FluentValidation, check out the Creating your first validator page.


If you use FluentValidation in a commercial project, please sponsor the project financially. FluentValidation is developed for free by @JeremySkinner in his spare time and financial sponsorship helps keep the project going. Please sponsor the project via either GitHub sponsors or OpenCollective.


public class CustomerValidator : AbstractValidator<Customer>
  public CustomerValidator()
    RuleFor(x => x.Surname).NotEmpty();
    RuleFor(x => x.Forename).NotEmpty().WithMessage("Please specify a first name");
    RuleFor(x => x.Discount).NotEqual(0).When(x => x.HasDiscount);
    RuleFor(x => x.Address).Length(20, 250);
    RuleFor(x => x.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");

  private bool BeAValidPostcode(string postcode)
    // custom postcode validating logic goes here


ASP.NET Integration