N242 Validering
Du skal skabe en tom konsol app med en klasse Person med følgende medlemmer:
- En egenskab kaldet Fornavn (implementeret som en automatisk egenskab – brug ”prop” + tab)
- En egenskab kaldet Efternavn (implementeret som en automatisk egenskab – brug ”prop” + tab)
- En egenskab kaldet Email (string)
- En egenskab kaldet Fødselsdato (DateTime)
- En metode kaldet FuldtNavn som returnerer Fornavn + ” ” + Efternavn
Brug klassen i Main ved at skabe et objekt med new og test at det virker.
Når det virker, skal du installere FluentValidation i projektet:
Opret en validatorklasse PersonValidator der arver fra AbstractValidator<Person> og tilføj følgende regler:
- Fornavn: ikke tomt og må ikke indeholde tal (custom check)
- Efternavn: ikke tomt
- Email: ikke tomt og gyldig e-mail
- Fødselsdato: skal være efter 1-1-1900 og før i dag
Til sidst: i Main skal I validere et par Person-objekter med forskellige (og med vilje forkerte) data og udskrive fejlene.
Klik for at se et forslag til en løsning
using FluentValidation;
using FluentValidation.Results;
var p = new Person
{
Fornavn = "", // tomt for at trigge fejl
Efternavn = "Olsen",
Email = "invalid-email.dk",
Fødselsdato = new DateTime(1810, 1, 1)
};
var validator = new PersonValidator();
ValidationResult result = validator.Validate(p);
if (!result.IsValid)
{
foreach (var failure in result.Errors)
{
Console.WriteLine($"Property {failure.PropertyName} fejlede validering: {failure.ErrorMessage}");
}
}
else
{
Console.WriteLine("Person er gyldig");
}
// Klassen Person og arvinger
public class Person
{
public string? Fornavn { get; set; }
public string? Efternavn { get; set; }
public string? Email { get; set; }
public DateTime Fødselsdato { get; set; }
public string? FuldtNavn()
{
return $"{Fornavn} {Efternavn}";
}
}
// Validator
public class PersonValidator : AbstractValidator<Person>
{
public PersonValidator()
{
RuleFor(x => x.Fornavn)
.NotEmpty().WithMessage("Fornavn må ikke være tomt")
.Must(name => !name.Any(char.IsDigit)).WithMessage("Fornavn må ikke indeholde tal");
RuleFor(x => x.Efternavn)
.NotEmpty().WithMessage("Efternavn må ikke være tomt");
RuleFor(x => x.Email)
.NotEmpty().WithMessage("Email må ikke være tom")
.EmailAddress().WithMessage("Ugyldig e-mail adresse");
RuleFor(x => x.Fødselsdato)
.GreaterThan(new DateTime(1900, 1, 1)).WithMessage("Fødselsdato skal være efter 1-1-1900")
.LessThan(DateTime.Now).WithMessage("Fødselsdato skal være i fortiden");
}
}