Fluent Validation: Form Verilerini Profesyonelce Doğrulama

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16
C# ve ASP.NET Core projelerinde kullanıcıdan gelen verilerin doğruluğunu kontrol etmek (validation), uygulamanın güvenliği ve veri bütünlüğü için hayati önem taşır. C# ile gelen standart [Required], [StringLength] gibi Attribute tabanlı doğrulamalar bir noktadan sonra yetersiz kalabilir ve kodun içine iş mantığı sızmasına neden olur.

İşte bu noktada Fluent Validation, doğrulama kurallarını sınıflardan ayırıp daha okunaklı, esnek ve güçlü bir şekilde yazmamızı sağlar.

Fluent Validation: Temiz ve Güçlü Veri Doğrulama​


Fluent Validation, .NET için geliştirilmiş, kuralları "zincirleme" (fluent) bir yapıyla yazmanıza olanak tanıyan popüler bir kütüphanedir. İş mantığı ile doğrulama kurallarını birbirinden ayırarak Single Responsibility prensibine sadık kalmanıza yardımcı olur.



1. Neden Fluent Validation Kullanmalıyız?​


Standart veri açıklamaları (Data Annotations) basit işler için iyidir, ancak karmaşık senaryolarda sınıflarınızı kirletir:


  • []Karmaşık Mantıklar:** "Eğer yaş 18'den küçükse veli adı zorunlu olsun" gibi koşullu kuralları Attribute'lar ile yazmak zordur.
    []Temiz Kod:** Sınıf (Entity/DTO) içinde sadece özellikler yer alır; doğrulama kuralları ayrı bir sınıfta toplanır.
    []Test Edilebilirlik:** Doğrulama kuralları tek başına birim testlerine tabi tutulabilir.
    []Özel Hata Mesajları:** Her kural için çok kolay bir şekilde dinamik ve yerelleştirilmiş hata mesajları tanımlanabilir.




2. Kurulum ve İlk Doğrulayıcı (Validator)​


Öncelikle FluentValidation.AspNetCore paketini projenize eklemelisiniz. Ardından, doğrulanacak nesne için bir sınıf oluşturulur.

C#:
public class MusteriValidator : AbstractValidator<MusteriDto>
{
public MusteriValidator()
{
RuleFor(m => m.Ad)
.NotEmpty().WithMessage("Ad alanı boş geçilemez.")
.Length(2, 50).WithMessage("Ad 2 ile 50 karakter arasında olmalıdır.");

    RuleFor(m => m.Eposta)
        .NotEmpty().WithMessage("E-posta gereklidir.")
        .EmailAddress().WithMessage("Geçerli bir e-posta adresi giriniz.");

    RuleFor(m => m.Yas)
        .InclusiveBetween(18, 99).WithMessage("Yaş 18 ile 99 arasında olmalıdır.");
}

}



3. Koşullu ve Özel Doğrulamalar​


Fluent Validation'ın asıl gücü, karmaşık kuralları çok basit bir dille yazabilmesidir.

C#:
// Koşullu kural: Eğer şehir "İstanbul" ise KargoNotu zorunlu olsun.
RuleFor(m => m.KargoNotu)
.NotEmpty()
.When(m => m.Sehir == "İstanbul");

// Özel metot (Must): TC Kimlik no kontrolü gibi özel işlemler.
RuleFor(m => m.TcNo)
.Must(TcDogrula).WithMessage("TC Kimlik numarası geçersiz.");

private bool TcDogrula(string tc) {
// Karmaşık algoritma buraya...
return tc.Length == 11;
}



4. ASP.NET Core ile Entegrasyon​


Kuralların otomatik çalışması için Program.cs içinde kayıt yapılması gerekir. Bu sayede Controller içindeki ModelState.IsValid kontrolü Fluent Validation kurallarına göre sonuç verir.

C#:
builder.Services.AddControllers()
.AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<MusteriValidator>());



Sonuç​


Fluent Validation, profesyonel .NET projelerinde standart haline gelmiş bir araçtır. Veri doğrulama mantığını merkezi bir noktada toplamak, hem kodun bakımını kolaylaştırır hem de hata yapma payınızı azaltır. Özellikle API projelerinde, hatalı gelen verileri kullanıcıya anlamlı mesajlarla dönmek için en iyi tercihtir.
 
Geri
Üst