26 Ocak 2026 Pazartesi

Web Programlama - 3. Sınıf - 8. Ünite Özet

Web Programlama 2 - Ünite 8: LINQ Teknolojisi
Ders Notları

LINQ (Language Integrated Query)

Web Programlama 2 - Ünite 8: Modern Veri Sorgulama Mimarisi

Neden LINQ?

Geleneksel programlamada, her veri kaynağı (SQL, XML, Array) için farklı bir dil öğrenmek gerekir. LINQ, bu karmaşayı ortadan kaldırarak tüm veri kaynaklarına C# diliyle, tip güvenli (type-safe) bir şekilde erişmemizi sağlayan devrimsel bir teknolojidir.

  • Standart: Tek söz dizimi, her kaynak.
  • IntelliSense: Kod yazarken otomatik tamamlama.
  • Hata Denetimi: Çalışma zamanı değil, derleme zamanı kontrolü.
SQL XML Array
LINQ Motoru
Tek Tip C# Nesneleri
1

Sorgu Yürütme Modelleri (Execution Modes)

LINQ sorgularının "ne zaman" çalıştığını anlamak hayati önem taşır. İki mod vardır:

A. Ertelenmiş Yürütme (Deferred)

Sorgu tanımlandığında çalışmaz. Veri istendiğinde (foreach) çalışır.

var sorgu = sayilar.Where(x => x % 2 == 0);
// Sorgu henüz çalışmadı!

sayilar[1] = 8; // Veriyi değiştirdik

foreach(var s in sorgu) // ŞİMDİ çalıştı
{ ... }
Sonuç: Değişikliği (8 sayısını) GÖRÜR.

B. Anlık Yürütme (Immediate)

ToList(), Count() gibi metotlar sorguyu o an çalıştırır.

var liste = sayilar.Where(...).ToList();
// Sorgu ÇALIŞTI ve bitti!

sayilar[1] = 8; // Veriyi değiştirdik

foreach(var s in liste)
{ ... }
Sonuç: Değişikliği (8 sayısını) GÖRMEZ. İlk halini aldı.
2

Söz Dizimi: Query vs. Method

Query Syntax (SQL Benzeri)
from k in Kitaplar
where k.Sayfa > 500
select k;
Method Syntax (Lambda)
Kitaplar.Where(k => k.Sayfa > 500);

// Lambda: k (input) => (şart)

Her iki yöntem de arka planda aynı IL (Intermediate Language) koduna dönüşür.

3

Sık Kullanılan Operatörler

Where (Filtrele)

Koşul

Veri kümesini belirli kriterlere göre süzer.

.Where(x => x.Sayfa > 500)

OrderBy (Sırala)

Sıralama

A-Z veya 0-9 sıralar. Tersi için OrderByDescending.

.OrderBy(x => x.Ad)

Select (Seç/Dönüştür)

İzdüşüm

Verinin sadece belirli sütunlarını veya yeni bir formunu alır.

.Select(x => x.YazarAdi)

First vs FirstOrDefault

Kritik
  • First: Kayıt yoksa HATA fırlatır.
  • FirstOrDefault: Kayıt yoksa NULL döner. (Önerilen)
.FirstOrDefault(x => x.Id == 99)

Toplama (Aggregation)

Matematik
Sum: Toplam
Count: Adet
Max: En Büyük
Min: En Küçük

Miktar Belirleyiciler

Boolean
  • Any(): Hiç kayıt var mı? (veya şarta uyan)
  • All(): Hepsi şarta uyuyor mu?
  • Contains(): Listede var mı?

Akademik Özet

LINQ, modern yazılım mimarisinde veri manipülasyonunun kalbidir. Ertelenmiş yürütme (Deferred Execution) performansı optimize ederken, Lambda ifadeleri ve Extension Method'lar kodun okunabilirliğini ve yazım hızını artırır. Bir yazılım mühendisi için LINQ operatörlerine hakim olmak, veri yapıları üzerinde cerrahi bir yetkinlik kazandırır.

Web Programlama 2 © 2024

Ünite 8: LINQ Teknolojisi - Akademik Ders Notları

Web Programlama - 3. Sınıf - 7. Ünite Özet

Web Programlama 2 - Ünite 7: Model Doğrulama (Validation)
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.

Web Programlama 2 © 2024

Ünite 7: Model Doğrulama (Validation) - Akademik Ders Notları

Web Programlama - 3. Sınıf - 6. Ünite Sınav

Tag Helpers Ünite Testi

Ünite 6: Etiket Yardımcıları (Tag Helper)

HTML Dostu Sunucu Kodları ve Dinamik Veri Bağlama.

Soru 1 / 10 Skor: 0

Web Programlama - 3. Sınıf - 6. Ünite Özet

Web Programlama 2 - Ünite 6: Etiket Yardımcıları (Tag Helpers)
Ders Notları

Etiket Yardımcıları (Tag Helpers)

Web Programlama 2 - Ünite 6: HTML ve C# Arasındaki Modern Köprü

Tag Helper Nedir?

ASP.NET Core ile gelen Tag Helper yapısı, sunucu taraflı kodların (C#) standart HTML etiketleri gibi görünmesini ve davranmasını sağlar. Eski @Html.TextBoxFor yapısının yerini alan, tasarımcı dostu modern bir mimaridir.

Eski Yöntem (HTML Helper)
@Html.TextBoxFor(m => m.Ad, new { @class = "form-control" })
HTML yapısına aykırı, okuması zor.
Yeni Yöntem (Tag Helper)
<input asp-for="Ad" class="form-control" />
Standart HTML gibi, temiz ve güvenli.
Kurulum Notu: Kullanmak için _ViewImports.cshtml dosyasına şu satır eklenmelidir:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
2

Yerleşik (Built-in) Tag Helper Türleri

A. Anchor (Bağlantı) Tag Helper

Statik URL yerine, Controller ve Action isimlerine göre dinamik link üretir.

// Razor Kodu
<a asp-controller="Ogrenci" asp-action="Kaydet">
  Kaydet
</a>
// HTML Çıktısı (Browser)
<a href="/Ogrenci/Kaydet">
  Kaydet
</a>

B. Form Tag Helper

Güvenlik

Otomatik olarak CSRF (Siteler Arası İstek Sahteciliği) koruması ekler.

<!-- Çıktıda otomatik eklenen gizli güvenlik anahtarı -->
<input name="__RequestVerificationToken" type="hidden" value="..." />

C. Input Tag Helper (Akıllı Tip Tahmini)

Modeldeki C# veri tipine bakarak HTML type özelliğini otomatik belirler.

Model: String
public string Ad { get; set; }
-------------------------
<input asp-for="Ad" />
-> type="text"
Model: Boolean
public bool Onay { get; set; }
-------------------------
<input asp-for="Onay" />
-> type="checkbox"

D. Label Tag Helper

Data Annotations gücünü kullanır. Modeldeki [Display] özelliğini okur.

[Display(Name="Öğrenci Adı")]
public string Ad { get; set; }
<label asp-for="Ad"></label>
-> <label>Öğrenci Adı</label>
3

Scaffolding (İskele Kurma)

Otomatik Kod Üretimi

Profesyonel geliştirmede CRUD (Ekle, Oku, Güncelle, Sil) sayfalarını tek tek yazmak yerine, Scaffolding kullanılır. Visual Studio, modelinize bakar ve tüm Tag Helper'ları içeren hazır View sayfaları üretir.

Model Seç
Şablon Seç
Hazır View

Web Programlama 2 © 2024

Ünite 6: Etiket Yardımcıları (Tag Helper) - Akademik Ders Notları

Web Programlama - 3. Sınıf - 5. Ünite Sınav

Durum Yönetimi ve Veri Aktarımı Testi

Ünite 5: Durum Yönetimi ve View’e Veri Aktarımı

Session, Cookie, ViewData, ViewBag ve TempData kavramları.

Soru 1 / 10 Puan: 0

Web Programlama - 3. Sınıf - 5. Ünite Özet

Web Programlama 2 - Ünite 5: Durum Yönetimi ve Veri Aktarımı
Ders Notları

Durum Yönetimi ve Veri Aktarımı

Web Programlama 2 - Ünite 5: Web'in Hafızası ve İletişim

Temel Handikap: "Unutkan" Web

HTTP protokolü "Stateless" (Durumsuz) bir yapıdadır. Sunucu, bir isteğe yanıt verdikten sonra o kullanıcıyı unutur. Modern uygulamalarda (Sepet, Üyelik) kullanıcının hatırlanması için Durum Yönetimi şarttır.

Problem: Her istek, sanki sunucuyla ilk kez tanışıyormuş gibi bağımsızdır.
1

Durum Yönetimi (Hatırlama Teknikleri)

A. İstemci Taraflı (Tarayıcı)

Veri kullanıcının bilgisayarında saklanır. Güvenlik riski taşır, manipüle edilebilir.

  • 1. Query String
    site.com/Urun?id=5&renk=mavi
    Adres çubuğunda taşınır. Güvensizdir.
  • 2. Hidden Fields
    <input type="hidden" ... >
    Form içinde gizlidir ama kaynak kodda görünür.
  • 3. Cookies (Çerezler) Tarayıcıda saklanan metin dosyalarıdır. "Beni Hatırla" ve tema tercihleri için kullanılır.
    Response.Cookies.Append("Tema", "Koyu");

B. Sunucu Taraflı (Server)

Veri sunucuda saklanır, kullanıcıda sadece bir anahtar (ID) bulunur. Daha güvenlidir.

Session (Oturum)

Kullanıcı siteye girdiğinde sunucu ona benzersiz bir Session ID verir. Asıl veri (Ad, Yetki) sunucu belleğinde bu ID ile tutulur.

Ayar: Startup.cs içinde AddSession() ve UseSession() gereklidir.
// Veri Yazma
HttpContext.Session.SetString("Kullanici", "Ali");

// Veri Okuma
var k = HttpContext.Session.GetString("Kullanici");
2

Senaryo: Güvenli Giriş (Login)

1

Giriş Yap

Kullanıcı adı/şifre doğruysa sunucu hafızasına not düşülür.

Session.SetString("User", "Ahmet")
2

Sayfa İsteği

Kullanıcı "Gizli Sayfa"ya gitmek ister.

3

Kontrol (Gatekeeper)

Sunucu Session'a bakar.

if (Session["User"] == null)
-> Redirect(Login)
3

Veri Aktarımı (Controller -> View)

İş mantığının sonucu olan verileri ekrana taşımak için 4 temel yöntem vardır.

A. Zayıf Türlü (Pratik ama Riskli)

ViewBag Dinamik

İstediğin ismi verip değer atayabilirsin. Hata varsa çalışma zamanında patlar.

// Controller
ViewBag.Mesaj = "Merhaba";
// View
@ViewBag.Mesaj
ViewData Dictionary

Anahtar-Değer mantığı. Okurken tip dönüşümü (casting) gerekir.

ViewData["Ad"] = "Ayşe";
@((string)ViewData["Ad"])
TempData Redirect Dostu

RedirectToAction sonrası hayatta kalır. Tek kullanımlıktır.

B. Güçlü Türlü (Profesyonel Yöntem)

View Model

Veri, belirsiz çantalarla değil, belirli bir Sınıf (Class) yapısıyla taşınır. Hata yaparsan derleyici uyarır (Compile-time check).

1. Controller
var ogr = new Ogrenci();
ogr.Ad = "Veli";
return View(ogr); // Tepsiyi ver
2. View (En Tepe)
@model Ogrenci

<!-- IntelliSense Çalışır! -->
@Model.Ad

Web Programlama 2 © 2024

Ünite 5: Durum Yönetimi ve Veri Aktarımı - Akademik Ders Notları

25 Ocak 2026 Pazar

Web Programlama - 3. Sınıf - 4. Ünite Sınav

Form İşlemleri ve Model Bağlama Testi

Ünite 4: Form İşlemleri ve Model Bağlama

Veri gönderimi ve Model eşleştirme temelleri.

Soru 1 / 10 Başarı: 0

Web Programlama - 3. Sınıf - 8. Ünite Özet

Web Programlama 2 - Ünite 8: LINQ Teknolojisi Ders No...