Ders Notları
Model Doğrulama (Validation)
Web Programlama 2 - Ünite 7: Güvenli Veri İşleme
Temel Prensip
"Kullanıcıdan gelen veriye asla güvenilmez."
Bu ünite, bu güvensizliği sistematik bir güvene dönüştürmeyi; veriyi veritabanına kaydetmeden önce format, aralık ve kurallar süzgecinden geçirmeyi öğretir.
1
Veri Doğrulamanın İki Cephesi
1. İstemci Taraflı (Client-Side)
- Konum: Kullanıcının tarayıcısı (JavaScript/jQuery).
- Avantaj: Çok hızlıdır. Sunucuyu yormaz. Anlık geri bildirim verir.
- Risk: JS kapatılabilir veya Postman ile aşılabilir. Tek başına yetersizdir.
2. Sunucu Taraflı (Server-Side)
- Konum: Controller katmanı (C#).
- Önemi: Güvenlik duvarıdır. Son savunma hattıdır.
- Strateji: İstemci tarafı geçilse bile burası veriyi yakalar.
2
Data Annotations (Kural Seti)
Model sınıflarında özelliklerin (properties) tepesine yazılan kurallardır. System.ComponentModel.DataAnnotations kütüphanesi kullanılır.
[Required]
Zorunlu Alan
Boş geçilemez.
[StringLength(50)]
Karakter Sınırı
Max/Min uzunluk.
[Range(18,100)]
Aralık Kontrolü
Sayısal değer aralığı.
[EmailAddress]
E-Posta Formatı
x@y.com formatı.
[RegularExpression]
Özel Desen (Regex)
Telefon, TC Kimlik vb.
[Display(Name="..")]
Görünen İsim
Label etiketi için.
3
Uygulama: Öğrenci Kayıt Senaryosu
Adım 1: Anayasa (Model)
Kuralların tanımlandığı yer.
Models/Ogrenci.cs
public class Ogrenci { // Kural 1: Boş geçilemez, özel hata mesajı [Required(ErrorMessage = "İsim boş bırakılamaz")] [Display(Name = "Ad Soyad")] public string AdSoyad { get; set; } // Kural 2: 1 ile 6 arasında olmalı [Range(1, 6)] public int Sinif { get; set; } }
Adım 2: Arayüz Yansıması (View)
asp-validation-for etiketi kuralları okur ve hatayı gösterir.
Views/Ogrenci/Ekle.cshtml
<form asp-action="Kaydet"> <!-- Etiket --> <label asp-for="AdSoyad"></label> <!-- Giriş Kutusu --> <input asp-for="AdSoyad" class="form-control" /> <!-- Hata Mesajı Alanı --> <span asp-validation-for="AdSoyad" class="text-danger"></span> <input type="submit" value="Ekle" /> </form> @* JavaScript kontrolü için (Client-side) *@ @section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");} }
Adım 3: Son Kontrol (Controller)
ModelState.IsValid ile verinin anayasaya uygunluğu denetlenir.
Controllers/OgrenciController.cs
[HttpPost] public IActionResult Kaydet(Ogrenci ogr) { // Sihirli Kontrol: Kurallara uyuyor mu? if (ModelState.IsValid) { // Uygun: Veritabanına kaydet Ogrenciler.Add(ogr); return View(ogr); } else { // Uygun DEĞİL: Hata mesajlarıyla formu geri gönder return View("Hata"); } }
Profesör Notu: Altın Kural
1. TANIMLA
Modelde kuralları yaz.
2. YANSIT
View'de hataları göster.
3. DENETLE
Controller'da onayla.
Hiç yorum yok:
Yorum Gönder