FluentValidation w ASP.Net Core

W trakcie pracy nad naszymi aplikacjami często musimy sprawdzić, czy na przykład dane wysłane do nas w formularzu lub do naszego api spełniają pewne kryteria. Kryteriami tymi mogą być długość numeru pesel, prawidłowy adres email oraz wiele, wiele więcej. Dziś pokażę, jak skonfigurować taką walidację przy użyciu biblioteki FluentValidation w ASP.Net Core Web Api. Zapraszam.

Aby zainstalować bibliotekę w naszym projekcie używamy dwóch komend:

dotnet add package FluentValidation
dotnet add package FluentValidation.AspNetCore

Zainstalują nam one paczkę wymaganą do walidacji oraz drugą, konieczną do wpięcia naszej walidacji w aplikację ASP.Net Core.
Na potrzeby dzisiejszej aplikacji stworzymy sobie prostą klasę User zawierającą podstawowe pola:

public class User
    {
        public string Name { get; set; }
        public string Surname { get; set; }
        public string Pesel { get; set; }
        public string Email { get; set; }
        public DateTime BirthDate { get; set; }
    }

Na pola zostanie założona walidacja: pesel nie może być dłuższy niż 11 znaków, email musi być poprawnym adresem(posiadać małpę np), a BirthDate nie może być datą z przyszłości.
Tworzymy teraz w naszym projekcie klasę UserValidator. Będzie to klasa zawierająca logikę walidacji naszego Usera. Klasa ta musi dziedziczyć po klasie AbstractValidator<T>, gdzie jako T podajemy klasę, którą chcemy walidować. Klasa wyglądać będzie w ten sposób:

public class UserValidator : AbstractValidator<User>
    {
        public UserValidator()
        {
            RuleFor(x => x.Email)
                .NotEmpty()
                .EmailAddress();
            RuleFor(x => x.BirthDate)
                .NotEmpty()
                .LessThan(DateTime.Now);
            RuleFor(x => x.Pesel)
                .NotEmpty()
                .MaximumLength(11);
        }
    }

Jak widać, posługiwanie się FluentValidation jest dosyć proste: Wskazujemy property, które chcemy walidować, a następnie ustawiamy dla niego reguły. W tym przypadku żaden wskazany przez nas property nie może być pusty. Email musi być poprawnym adresem email(wykorzystaliśmy do tego metodę oferowaną nam już przez bibliotekę), BirthDate nie może być w przyszłości, pesel z kolei może mieć długość maksymalnie 11 znaków. Teraz należy zarejestrować naszą walidację w naszym Startupie:

services
    .AddMvc()
    .AddFluentValidation();

services.AddScoped<IValidator<User>,UserValidator>();

Pamiętamy, że musimy zarejestrować również nasz UserValidator, jednak jako implementację interfejsu IValidator<T>. W tym momencie możemy użyć naszej walidacji w naszym Api:

[Route("api/[controller]")]
    public class UserController : Controller
    {

        [HttpPost]
        public IActionResult Post([FromBody]User user)
        {
            if(!ModelState.IsValid)
            {
                // tutaj możemy robić co chcemy, my zwrócimy po prostu wszystkie błędy, które znajdziemy
                return BadRequest( ModelState.Values );
            }
            return Ok( user );
        }
    }

Wynik dodawania błędnych danych będzie wyglądał tak:
Screen Shot 2018-07-01 at 12.48.33

Screen Shot 2018-07-01 at 12.48.38

Screen Shot 2018-07-01 at 12.48.43

Zakończenie

Dziś poznaliśmy podstawy podstaw używania biblioteki FluentValidation w aplikacji ASP.Net Core. Jest to bardzo potężna biblioteka, pozwalająca nam na walidację naszych danych. Zachęcam do wypróbowania oraz pobawienia się różnymi wariacjami walidacji.

Do przeczytania niedługo 😉

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s