Validator

Eintrag zuletzt aktualisiert am: 11.01.2024

Validator ist eine Klasse im .NET-Namensraum System.ComponentModel.DataAnnotations. Sie dient dazu, zu überprüfen, ob ein konkretes Objekt in der zugehörigen Klasse festgelegt Bedingungen erfüllt. Diese Bedingungen definiert man in Form von Validierungsannotationen, z.B. [RegularExpression], [Compare], [Range], [Phone] und [CreditCard] sowie [AllowedValues].

Es gibt GUI-Steuerelemente, die die Annotationen berücksichtigen, z.B. <InputText>, <InputNumber> und <InputDate> in Blazor.

Eine Validierung kann man auch unabhängig von einem Steuerelement im Programmcode ausführen. Dazu gibt es die Klassen ValidationContext, Validator, ValidationResult und ValidationException

Beispiel

using System.ComponentModel.DataAnnotations;
using ITVisions;

namespace NET8Konsole.FCL;

public class SoftwareDeveloper
{

[Required(DisallowAllDefaultValues = true)] // 00000000-0000-0000-0000-000000000000 verboten
public Guid PersonGuid { get; set; }

[Required(DisallowAllDefaultValues = true)] // 01.01.0001 verboten
public DateTime Geburtsdatum { get; set; }

[Range(0d, 120d, MinimumIsExclusive = true, MaximumIsExclusive = true)] // Alter >0 und < 120
public double Alter { get; set; }

[AllowedValues("", "Dr.", "Prof. Dr.")] // nur diese Anreden erlaubt
public string? Anrede { get; set; }

[Length(2, 50)] // Name mindestens 2, maximal 50 Zeichen
public string? Name { get; set; }

[Length(0, 3)] // bis zu 3 Websites
public List<string> Websites { get; set; } = new();

[Base64String] // muss Base64 sein --> ist natürlich kein Schutz --> nur ein Beispiel ;-)
public string? Kennwort { get; set; }
}

public class NET8AnnotationsDemo
{

public void Run()
{
CUI.H2(nameof(NET8AnnotationsDemo));

var hs = new SoftwareDeveloper() { Name = "Dr. Holger Schwichtenberg", Anrede = "Dr", Kennwort = "geheim" };
hs.Websites.Add("www.IT-Visions.de");
hs.Websites.Add("www.dotnet-doktor.de");
hs.Websites.Add("www.entwickler-lexikon.de");
hs.Websites.Add("www.dotnet7.de");
hs.Websites.Add("www.dotnet8.de");

// Validierung durchführen
var ctx = new ValidationContext(hs);
var results = new System.Collections.Generic.List<ValidationResult>();

if (!Validator.TryValidateObject(hs, ctx, results, true))
{
// Fehler ausgeben
foreach (var validationResult in results)
{
CUI.Warning(validationResult.ErrorMessage);
}
}
else
{
// Es war alles OK
CUI.Success("Validation successful!");
}
}
}

Beim Ausführen des Programmcodes kommt es zu diesen sechs Validierungsfehlern:
1. The PersonGuid field is required.
2. The Geburtsdatum field is required.
3. The field Alter must be between 0 exclusive and 120 exclusive.
4. The Anrede field does not equal any of the values specified in AllowedValuesAttribute.
5. The field Websites must be a string or collection type with a minimum length of '0' and maximum length of '3'.
6. The Kennwort field is not a valid Base64 encoding.