Datenvalidierung in C# (.NET): Bibliotheken, Attribute und FluentValidation

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenvalidierung in C# (.NET): Vollständiger Leitfaden

Datenvalidierung ist einer der wichtigsten Aspekte bei der Entwicklung zuverlässiger und sicherer Anwendungen in C#. Sie stellt sicher, dass Eingabedaten dem erwarteten Format, Wertebereichen und Geschäftsregeln entsprechen. Im .NET-Ökosystem gibt es mehrere leistungsstarke Werkzeuge zur Validierung: von den integrierten Attributen System.ComponentModel.DataAnnotations bis zur flexiblen Bibliothek FluentValidation. In diesem Artikel werden wir beide Ansätze mit Codebeispielen im Detail behandeln.



1. Integrierte Validierung mit DataAnnotations

Der Namespace System.ComponentModel.DataAnnotations bietet eine Reihe von Attributen, die auf Eigenschaften von Modellklassen angewendet werden können. Dies ist die einfachste und schnellste Methode zur Validierung, insbesondere in ASP.NET Core MVC und Blazor.



Wichtige Attribute:

  • [Required] — Der Wert darf nicht null oder leer sein.
  • [StringLength(max)] — Begrenzung der Zeichenkettenlänge.
  • [Range(min, max)] — Prüfung von Zahlenbereichen.
  • [RegularExpression(pattern)] — Prüfung mit regulärem Ausdruck.
  • [EmailAddress] — E-Mail-Validierung.
  • [Compare("OtherProperty")] — Vergleich zweier Eigenschaften (z. B. Passwort und Bestätigung).


Beispielmodell mit Attributen:

public class UserRegistrationDto{    [Required(ErrorMessage = "Name ist erforderlich")]    [StringLength(50, MinimumLength = 2, ErrorMessage = "Der Name muss zwischen 2 und 50 Zeichen lang sein")]    public string FirstName { get; set; }

[Required(ErrorMessage = "E-Mail ist erforderlich")] [EmailAddress(ErrorMessage = "Ungültiges E-Mail-Format")] public string Email { get; set; }

[Required] [Range(18, 120, ErrorMessage = "Das Alter muss zwischen 18 und 120 liegen")] public int Age { get; set; }

[Required] [DataType(DataType.Password)] public string Password { get; set; }

[Compare("Password", ErrorMessage = "Passwörter stimmen nicht überein")] public string ConfirmPassword { get; set; }}


Manuelle Modellprüfung:

public static bool ValidateUser(UserRegistrationDto user, out List<ValidationResult> errors){    var context = new ValidationContext(user);    errors = new List<ValidationResult>();    return Validator.TryValidateObject(user, context, errors, validateAllProperties: true);}

// Verwendung:var user = new UserRegistrationDto { FirstName = "A", Email = "invalid", Age = 15 };if (!ValidateUser(user, out var errors)){ foreach (var error in errors) Console.WriteLine(error.ErrorMessage);}


2. FluentValidation — Erweiterte Validierung

Die Bibliothek FluentValidation (NuGet: FluentValidation.AspNetCore) bietet eine flexiblere und lesbarere Möglichkeit, Validierungsregeln über eine Fluent-Schnittstelle zu beschreiben. Sie eignet sich ideal für komplexe Szenarien: bedingte Validierung, benutzerdefinierte Nachrichten, Regelketten und Integration mit DI-Containern.



Installation über NuGet:

dotnet add package FluentValidation.AspNetCore


Beispielvalidator:

using FluentValidation;

public class UserValidator : AbstractValidator<UserRegistrationDto>{ public UserValidator() { RuleFor(u => u.FirstName) .NotEmpty().WithMessage("Der Name darf nicht leer sein") .Length(2, 50).WithMessage("Der Name muss zwischen 2 und 50 Zeichen lang sein");

RuleFor(u => u.Email) .NotEmpty().WithMessage("E-Mail ist erforderlich") .EmailAddress().WithMessage("Ungültiges E-Mail-Format");

RuleFor(u => u.Age) .InclusiveBetween(18, 120).WithMessage("Das Alter muss zwischen

Empfehlungen