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:
1 |
Install-Package FluentValidation.AspNetCore |
Basic validation
Using the package is very easy. Let’s say you have to following class:
1 2 3 4 5 6 7 |
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:
1 2 3 4 |
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:
1 2 3 4 5 6 7 |
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.
1 2 3 4 |
Customer customer = new Customer(); CustomerValidator validator = new CustomerValidator(); ValidationResult result = validator.Validate(customer); |
The following code would write any validation failures to the console:
1 2 3 4 5 |
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!