0Pricing
C# Academy · Lektion

Benutzerdefinierte und bedingte Regeln

Erstellen Sie komplexe, bedingte Validierungslogik.

Benutzerdefinierte und bedingte Regeln ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Über integrierte Validatoren hinaus

Bei der Validierung in realen Anwendungen wird häufig benutzerdefinierte Logik benötigt: etwa wenn ein Wert eine Domänenprüfung bestehen oder eine Regel nur unter bestimmten Bedingungen gelten soll. FluentValidation unterstützt beides mit Must, When und benutzerdefinierten Validatortypen.

Das Must-Prädikat

Must übernimmt ein Prädikat, das true zurückgibt, wenn der Wert gültig ist. Das ist die einfachste Möglichkeit, beliebige Logik direkt auszudrücken.

RuleFor(c => c.Username)
    .Must(name => !name.Contains(" "))
    .WithMessage("Username cannot contain spaces.");

Must mit Zugriff auf das gesamte Objekt

Eine Überladung von Must stellt Ihnen neben dem Eigenschaftswert auch das übergeordnete Objekt bereit und ermöglicht dadurch Prüfungen über mehrere Eigenschaften hinweg.

RuleFor(o => o.DiscountedPrice)
    .Must((order, discounted) => discounted <= order.OriginalPrice)
    .WithMessage("Discounted price cannot exceed original price.");

Bedingte Regeln mit When

When wendet eine Regel nur an, wenn eine Bedingung erfüllt ist. In diesem Fall ist eine Lieferadresse nur für physische Bestellungen erforderlich.

RuleFor(o => o.ShippingAddress)
    .NotEmpty()
    .When(o => o.RequiresShipping);

Der Unless-Modifikator

Unless ist das Gegenteil von When: Die Regel wird ausgeführt, solange die Bedingung nicht wahr ist.

RuleFor(o => o.CouponCode)
    .NotEmpty()
    .Unless(o => o.IsGift);

Bedingungen gruppieren

Schließen Sie mehrere Regeln in einen einzigen When(...)-Block ein, um eine Bedingung übersichtlich für alle Regeln gemeinsam zu verwenden.

When(o => o.RequiresShipping, () =>
{
    RuleFor(o => o.ShippingAddress).NotEmpty();
    RuleFor(o => o.PostalCode).NotEmpty();
});

Asynchrone benutzerdefinierte Logik mit MustAsync

Wenn Ihre Prüfung die Datenbank oder eine API benötigt, verwenden Sie MustAsync. Validieren Sie das Modell mit ValidateAsync.

RuleFor(u => u.Email)
    .MustAsync(async (email, cancellation) =>
        !await _repository.EmailExistsAsync(email))
    .WithMessage("Email is already registered.");

Einen wiederverwendbaren benutzerdefinierten Validator schreiben

Für Logik, die Sie projektübergreifend wiederverwenden, schreiben Sie eine Erweiterungsmethode für IRuleBuilder. Dadurch werden benutzerdefinierte Regeln zu vollwertigen, verkettbaren Validatoren.

public static class CustomValidators
{
    public static IRuleBuilderOptions<T, string> ValidSlug<T>(
        this IRuleBuilder<T, string> rule)
    {
        return rule.Matches("^[a-z0-9-]+$")
            .WithMessage("Must be a lowercase slug.");
    }
}

Den benutzerdefinierten Validator verwenden

Nach der Definition lässt sich die Erweiterung wie jeder integrierte Validator verketten, sodass Ihre Validatoren ausdrucksstark bleiben.

RuleFor(p => p.Slug).NotEmpty().ValidSlug();

Die Custom-Methode für vollständige Kontrolle

Für komplexe Ergebnisse können Sie mit Custom über einen Kontext Validierungsfehler imperativ hinzufügen.

RuleFor(o => o.Items).Custom((items, context) =>
{
    if (items.Count == 0)
        context.AddFailure("An order must contain at least one item.");
});

Kaskadenmodi

Standardmäßig werden alle Validatoren einer Kette auch dann ausgeführt, wenn einer zuvor fehlschlägt. Setzen Sie CascadeMode.Stop, um beim ersten Fehler abzubrechen und redundante oder unsichere Prüfungen zu vermeiden.

RuleFor(c => c.Email)
    .Cascade(CascadeMode.Stop)
    .NotEmpty()
    .EmailAddress();

Kurzer Check

Testen Sie bedingte und benutzerdefinierte Regeln.

Zusammenfassung

Benutzerdefinierte und bedingte Regeln machen FluentValidation flexibel: Must für Inline-Prädikate (mit einer Überladung, die das gesamte Objekt bereitstellt), When/Unless für Bedingungen, gruppierte When-Blöcke, MustAsync für E/A-Prüfungen, wiederverwendbare IRuleBuilder-Erweiterungen, die imperative Custom-Methode und Cascade-Modi zur Steuerung des Auswertungsablaufs.

Häufig gestellte Fragen

Ist die Lektion „Benutzerdefinierte und bedingte Regeln“ kostenlos?

Ja — der vollständige Text von „Benutzerdefinierte und bedingte Regeln“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Benutzerdefinierte und bedingte Regeln“?

Erstellen Sie komplexe, bedingte Validierungslogik. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Benutzerdefinierte und bedingte Regeln“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Validierung mit Data Annotations
  2. FluentValidation-Regeln
  3. Benutzerdefinierte und bedingte Regeln
  4. Validierung in APIs integrieren
← Zurück zu C# Academy