FluentValidation is a wonderful validation package that is around for years. Last week I was busy with a new application in ASP.NET core. I wanted to add some validation and didn’t used FluentValidation in ASP.NET Core before. So I wanted to see if things where changed. This blog post contains some examples from the official FluentValidation Getting started documentation. In the next blog posts I will go into deeper validation of properties and reusing validators in different models.
Installation
For integration with ASP.NET Core, install the FluentValidation.AspNetCore package:
Install-Package FluentValidation.AspNetCore
Basic validation
Using the package is very easy. Let’s say you have to following class:
public class Customer { public int Id { get; set; } public string Surname { get; set; } public string Forename { get; set; } public decimal Discount { get; set; } public string Address { get; set; } }
You would define a set of validation rules for this class by inheriting from AbstractValidator:
using FluentValidation; public class CustomerValidator : AbstractValidator<Customer> { }
To specify a validation rule for a particular property, call the RuleFor method, passing a lambda expression that indicates the property that you wish to validate. For example, to ensure that the Surname property is not null, the validator class would look like this:
using FluentValidation; public class CustomerValidator : AbstractValidator<Customer> { public CustomerValidator() { RuleFor(customer => customer.Surname).NotNull(); } }
To run the validator, instantiate the validator object and call the Validate method, passing in the object to validate.
Customer customer = new Customer(); CustomerValidator validator = new CustomerValidator(); ValidationResult result = validator.Validate(customer);
The following code would write any validation failures to the console:
if(! results.IsValid) { foreach(var failure in results.Errors) { Console.WriteLine("Property " + failure.PropertyName + " failed validation. Error was: " + failure.ErrorMessage); } }
Deeper validation
In the next blog posts I will go into deeper validation with custom validators for properties and reusing validators in different models.
Hi Ralph, lots of great content here. Keep up the good work!