Datenvalidierung in C# (.NET) mit FluentValidation: vollständige Anleitung

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): Das leistungsstarke Tool FluentValidation



Datenvalidierung ist einer der Schlüsselaspekte bei der Entwicklung sicherer und zuverlässiger Anwendungen in C# (.NET). Unabhängig davon, ob Sie eine Web-API mit ASP.NET Core, eine Desktop-Anwendung mit WPF oder ein Konsolenprogramm erstellen, hilft die Prüfung von Eingabedaten, Fehler, SQL-Injection und fehlerhaftes Systemverhalten zu vermeiden. In diesem Artikel betrachten wir die Bibliothek FluentValidation im Detail – ein modernes, flexibles und weit verbreitetes Tool für die Validierung im .NET-Ökosystem.



Was ist FluentValidation und warum wird es benötigt?



FluentValidation ist eine Open-Source-Bibliothek für .NET, die es ermöglicht, Validierungsregeln für Objekte mit einer fluent-Schnittstelle (Methodenverkettung) zu beschreiben. Im Gegensatz zu den integrierten DataAnnotations-Attributen bietet FluentValidation:



  • Trennung von Validierungslogik und Datenmodell – Regeln werden in separate Validatorklassen ausgelagert.
  • Unterstützung komplexer Szenarien – Bedingte Prüfungen, benutzerdefinierte Regeln, eigenschaftsübergreifende Prüfungen.
  • Integration mit ASP.NET Core – Automatische Prüfung von Modellen in Controllern.
  • Vereinfachtes Testen – Validatoren können leicht isoliert und mit Unit-Tests abgedeckt werden.


Installation und Einrichtung



Installieren Sie zunächst das Paket über den NuGet Package Manager oder die .NET CLI:



dotnet add package FluentValidation


Wenn Sie ASP.NET Core verwenden, fügen Sie in Program.cs (oder Startup.cs) die Registrierung der Validatoren hinzu:



builder.Services.AddValidatorsFromAssemblyContaining<MyValidator>();


Erstellen eines einfachen Validators



Angenommen, wir haben ein Benutzermodell:



public class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }    public int Age { get; set; }}


Erstellen wir einen Validator, der von AbstractValidator<User> erbt:



using FluentValidation;

public class UserValidator : AbstractValidator<User>{ public UserValidator() { RuleFor(user => user.Name) .NotEmpty().WithMessage("Name ist erforderlich") .Length(2, 50).WithMessage("Der Name muss zwischen 2 und 50 Zeichen lang sein");

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

RuleFor(user => user.Age) .InclusiveBetween(18, 120).WithMessage("Das Alter muss zwischen 18 und 120 Jahren liegen"); }}


Jetzt kann die Validierung durchgeführt werden:



var validator = new UserValidator();var user = new User { Name = "A", Email = "invalid", Age = 15 };var result = validator.Validate(user);

if (!result.IsValid){ foreach (var error in result.Errors) { Console.WriteLine($"Fehler in {error.PropertyName}: {error.ErrorMessage}"); }}


Erweiterte Möglichkeiten



1. Benutzerdefinierte Regeln (Custom validators)



Sie können Ihre eigene Prüflogik mit der Methode Must schreiben oder eine separate Methode erstellen:



RuleFor(user => user.Name)    .Must(name => !string.IsNullOrEmpty(name) && name.All(char.IsLetter))    .WithMessage("Der Name darf nur Buchstaben enthalten");


2. Bedingte Validierung



Prüfen Sie Eigenschaften nur unter bestimmten Bedingungen:



RuleFor(user => user.Email)    .NotEmpty().When(user => user.Age > 18)    .WithMessage("Für erwachsene Benutzer ist eine E-Mail erforderlich");


3. Eigenschaftsübergreifende Prüfung



Vergleichen Sie Werte verschiedener Eigenschaften:



RuleFor(user => user.Password)    .Equal(user => user.ConfirmPa                    

Empfehlungen