ASP.NET SİTE YAPIMI

ASP.NET mor logosu ve site katmanlarını gösteren akış diyagramı yan yana kolaj

Çoğu geliştirici .NET tarafında ilk web projesine giriştiğinde benzer bir cümleyle karşılaşır: "Yeni bir ASP.NET Core projesi aç, çalıştır, gerisi gelir." Komut tek satır, sonuç beş dakika içinde tarayıcıda. Ama o varsayılan şablonun ardındaki mimari kararlar, ileride sayfayı, formu, kullanıcıyı, veritabanını ve sunucuyu yöneten katmanların tamamını şekillendirir. Bu yazıda ASP.NET ile web sitesi yapımını boş klasörden yayına kadar, hangi adımın neden yapıldığını da göstererek anlatıyoruz.

ASP.NET ile Site Geliştirmek Ne Demek?

ASP.NET, Microsoft'un sunucu tarafı web çatısıdır. Bugün pratikte "ASP.NET" denildiğinde kastedilen şey büyük çoğunlukla ASP.NET Core: açık kaynak, çapraz platform, tek bir runtime üzerinde Razor Pages, MVC, Blazor, Web API ve SignalR'ı birlikte sunan modern sürüm. Eski .NET Framework tabanlı Web Forms hâlâ kurumsal sistemlerde bakım görüyor; ama yeni bir site yapımına başlıyorsanız tercih net.

Site yapımı kavramının kapsamı projeye göre değişir. Bir kurumsal tanıtım sayfası için Razor Pages tek başına yeter; çok rollü bir SaaS panel için MVC artı Web API kombinasyonu daha rahat ölçeklenir. ASP.NET'in güçlü yanı, aynı çözüm dosyası altında bu farklı yaklaşımları birlikte barındırabilmesi. Resmi belgelere ve sürüm güncellemelerine Microsoft Learn ASP.NET dokümantasyonu üzerinden ulaşabilirsiniz; her yeni LTS sürümünde değişen şablon ve API'ler ilk olarak orada güncellenir.

Proje Şablonu Seçimi Razor Pages mi MVC mi?

İlk komuttan önce verilmesi gereken karar şablonudur. Üç ana seçenek vardır:

  • Razor Pages: Sayfa odaklı, her URL bir .cshtml dosyasıyla eşleşir. Küçük ve orta ölçekli sitelerde kod organizasyonu en sade olan seçenek.
  • MVC: Controller, Action ve View ayrımı net. Çok sayıda endpoint, karmaşık iş kuralları ve test edilebilirlik öne çıkıyorsa burada daha rahat çalışırsınız.
  • Blazor: Sayfayı C# ile bileşen olarak yazarsınız; server veya WebAssembly modunda çalışır. Tek dil ile zengin etkileşim kuran ekipler tercih ediyor.

Saf içerik ağırlıklı bir kurumsal site, makale yayını, ürün vitrini, sözleşme formu gibi senaryolarda Razor Pages konfor zonudur. Bir muhasebe paneli, çok kullanıcılı rezervasyon sistemi, raporlama portalı gibi işlerde MVC daha temiz büyür. İkisi arasında karar verirken "Aynı sayfada kaç farklı iş yapılıyor?" sorusu iyi bir göstergedir; cevap üçten fazlaysa MVC yönüne kayın.

Razor Pages ve MVC mimarilerini karşılaştıran şema mor ASP.NET renk paletinde sayfa ve controller akışı

Boş Klasörden İlk Çalışan Sayfaya

Geliştirme ortamında en azından .NET SDK kurulu olmalı. Visual Studio, JetBrains Rider veya VS Code üçü de geçerli. Razor Pages tabanlı bir site için minimum komut dizisi şöyledir:

  • dotnet new webapp -o KurumsalSite komutu sayfa odaklı şablonu oluşturur
  • cd KurumsalSite ile klasöre girilir
  • dotnet run komutu Kestrel sunucusunu ayağa kaldırır
  • Tarayıcıda https://localhost:5001 adresinde varsayılan sayfa görünür

Bu noktada açılan klasörde dikkat edilecek üç dosya vardır. Program.cs uygulamanın giriş noktasıdır; servis kaydı, middleware sıralaması ve endpoint yönlendirmesi burada tanımlanır. appsettings.json ortam ayarlarını tutar; veri tabanı bağlantısı, log seviyesi, üçüncü parti anahtarlar bu dosyaya yazılır ama hassas değerler için dotnet user-secrets tercih edilir. Pages/ klasörü URL ağacını yansıtır; Pages/Iletisim.cshtml dosyası doğrudan /Iletisim URL'ine düşer.

Yeni bir sayfa eklerken her dosyanın bir code-behind ikizi olduğunu unutmayın: Iletisim.cshtml.cs. View tarafında işaretleme, code-behind tarafında OnGet ve OnPost metodları. Bu ayrım Razor Pages'in temel sözleşmesidir ve kodu temiz tutmanın en pratik yoludur.

Veri Tabanı Katmanı ve Entity Framework Core

Statik bir tanıtım sayfası dışında neredeyse her ASP.NET sitesi bir veri tabanına bağlanır. Modern uygulamalarda standart araç Entity Framework Core'dur. SQL Server, PostgreSQL, MySQL, SQLite ve Azure Cosmos DB için resmi sağlayıcılar mevcuttur.

Tipik bir model katmanı şu aşamalardan geçer:

  1. Plain C# sınıfı olarak entity tanımlanır: Urun, Kategori, Siparis
  2. DbContext türetilir ve DbSet<Urun> şeklinde koleksiyon eklenir
  3. Program.cs içinde builder.Services.AddDbContext ile bağlantı dizesi kaydedilir
  4. dotnet ef migrations add Ilk komutu ilk göçü üretir
  5. dotnet ef database update ile şema veri tabanına uygulanır

Migration mekanizması "manuel SQL yazmamak" için değil, "şema değişikliklerini sürüm kontrolüne alabilmek" için vardır. Üretim ortamına çıkmadan önce her migration dosyası gözden geçirilmeli; otomatik üretilen SQL bazen beklenmedik DROP COLUMN içerebilir. Konuyu uygulamalı çalışmak isteyenler için ASP.NET Core eğitim programı bu adımları gerçek projeler üzerinde gösterir.

Kimlik Doğrulama Formlar ve Doğrulama

Kullanıcı tarafı bulunan her sitenin er ya da geç çözmesi gereken üç sorun vardır: kimlik doğrulama, yetki ve form doğrulama. ASP.NET bu üç başlık için hazır altyapı sunar.

ASP.NET Core Identity, kullanıcı adı ve parola, e-posta onayı, iki faktörlü doğrulama, harici sağlayıcı (Google, Microsoft, Facebook) entegrasyonu ve rol bazlı yetkilendirmeyi kapsayan bir paket. Bir komutla şablona eklenebilir ve veri tabanı tablolarını otomatik üretir. Çok büyük bir kullanıcı kitleniz yoksa kendi tablonuzu sıfırdan yazmak yerine Identity'yi özelleştirmek hem güvenli hem hızlıdır.

Form doğrulama tarafında ise model nesnesinin üzerine yazılan data annotation'lar hem sunucu hem istemci tarafında çalışır:

  • [Required] boş geçilemez alan
  • [EmailAddress] e-posta biçim kontrolü
  • [StringLength(120)] maksimum uzunluk
  • [Range(0, 9999)] sayısal aralık
  • [Compare("Sifre")] iki alanı eşleştirme

Bu nitelikler View tarafında asp-validation-for tag helper'ı ile birleştiğinde, kullanıcı submit'e bastığı an JavaScript ile hata gösterilir; sunucu tarafında ise ModelState.IsValid kontrolü ile aynı kurallar tekrar geçerlenir. Çift katman, formun client'ta atlanması durumunda bile veriyi korur.

ASP.NET site yapısı katmanları sunum veri ve kimlik doğrulama parçaları mor renk paletinde

Yayın Öncesi Yapılandırma ve Dağıtım

Geliştirme makinasında çalışan site ile yayında çalışan site arasındaki en sık karşılaşılan fark, ortam değişkenleri ve bağlantı dizeleridir. appsettings.Development.json yerel makineyi, appsettings.Production.json sunucuyu temsil eder. Ortam ASPNETCORE_ENVIRONMENT değişkeniyle seçilir.

Dağıtım seçenekleri:

  • IIS: Klasik Windows Server yaklaşımı; .NET Hosting Bundle kurulur, site IIS altına çıkılır
  • Linux + Kestrel + Nginx: Maliyet etkin, çoğu modern dağıtım bu çizgide
  • Azure App Service: Visual Studio veya GitHub Actions ile tek tıkla yayın; ölçeklendirme ve SSL hazır
  • Docker konteyneri: Aynı imajı staging ve production'a aynen taşımanın en temiz yolu

Hangi yolu seçerseniz seçin, build çıktısı aynı: dotnet publish -c Release -o ./yayin komutu bağımsız çalışabilir bir dizin üretir. Sunucuda .NET runtime kuruluysa bu klasörü kopyalayıp servisi başlatmak yeterlidir. SSL sertifikası, gzip sıkıştırma, statik dosya cache başlıkları gibi konular Kestrel önündeki ters proxy üzerinde ayarlanır.

Sık Yapılan Hatalar ve Pratik Uyarılar

İlk projelerde tekrar eden birkaç kalıp hata var. Bunları başta görmek, sonradan üç saatlik debug'tan kurtarır:

  • Middleware sırası karışıyor: UseRouting, UseAuthentication, UseAuthorization ve MapRazorPages sırası yanlış yazıldığında yetkilendirme sessizce atlanabilir. Şablonun verdiği sırayı bozmamak güvenli başlangıç.
  • DbContext lifetime karıştırılıyor: Singleton olarak kaydedilen DbContext kısa sürede thread sorunları üretir. Varsayılan olan Scoped bırakılmalı.
  • Üretimde detaylı hata sayfası açık kalıyor: app.UseDeveloperExceptionPage() yalnızca Development ortamında çağrılmalı; aksi takdirde stack trace dışarı sızar.
  • Statik dosyalar 404 dönüyor: UseStaticFiles middleware'i routing'den önce yazılmalı, wwwroot klasörü deploy paketinin içinde olmalı.
  • Migration üretim veri tabanında çalıştırılıyor: Otomatik Database.Migrate() çağrıları küçük projelerde tatlı görünür ama riskli. Üretim için elle kontrollü adım daha güvenli.

Bu liste tüketici değil, başlangıç filtresi. Site büyüdükçe loglama altyapısı, dağıtık cache, arka plan görevleri ve sağlık kontrolleri gibi konular eklenir. Mikroservis tarafına geçildiğinde ise ayrı bir disiplin başlar; o yöne meyilliyseniz .NET mikroservisler eğitimi içeriği konuyu uçtan uca toplar.

Sık Sorulan Sorular

ASP.NET ile site geliştirmek için hangi araçlar gereklidir?

Temel olarak .NET SDK ve bir editör yeterlidir. Visual Studio Windows tarafında en zengin seçenek; JetBrains Rider çapraz platform alternatifi; Visual Studio Code ise hafif kurulumla tüm temel ihtiyacı karşılar. Veri tabanı tarafında SQL Server Express ücretsiz başlangıç içindir; PostgreSQL açık kaynak ve üretim ölçeğinde rahat çalışır.

Yeni bir projede Razor Pages mi MVC mi seçmek daha mantıklı?

Sayfa sayısı az, her sayfa kendi başına bir iş yapıyorsa Razor Pages kodu daha temiz tutar. Çok sayıda endpoint, karmaşık iş kuralları ve API'ler aynı çatıda toplanacaksa MVC daha esnektir. Aynı çözüm içinde ikisini birlikte de kullanabilirsiniz; karar dogmatik değil, projenin şekline göre verilmeli.

ASP.NET Core ile ASP.NET Framework arasındaki fark nedir?

ASP.NET Core açık kaynak, çapraz platform ve modüler bir mimaridir; Linux ve Docker üzerinde sorunsuz çalışır. .NET Framework yalnızca Windows üzerinde çalışan klasik sürümdür ve aktif olarak yeni özellik almıyor. Yeni projeler için tercih net ASP.NET Core; mevcut Framework projeleri ise bakım modunda kalmaya devam ediyor.

Veri tabanı bağlantısı için Entity Framework Core zorunlu mu?

Zorunlu değil. Dapper gibi mikro ORM'ler veya doğrudan ADO.NET kullanılabilir. Entity Framework Core yüksek soyutlama ve migration desteğiyle hızlı geliştirmeye uygunken, Dapper performans odaklı sorgular için daha ince kontrol verir. Aynı projede iki yaklaşımı birlikte kullanan ekipler de var.

ASP.NET sitesi Linux sunucuda yayınlanabilir mi?

Evet. ASP.NET Core Linux üzerinde tamamen desteklenir. Tipik dizilim Kestrel sunucusu önüne Nginx veya Apache ters proxy konumlandırmaktır. SSL sonlandırma, statik dosya servis ve sıkıştırma proxy katmanında yapılır. Docker imajıyla yayın bu yaklaşımı daha taşınabilir hâle getirir.

Site yapımına başlamak için hangi ön bilgiye sahip olmak gerekir?

Temel C# bilgisi, HTML ve CSS okuma yazma, basit SQL sorguları yeterli başlangıç eşiğidir. JavaScript ileride form geliştirme ve interaktif bileşenler için lazım olur ama ilk haftada zorunlu değildir. HTTP'nin nasıl çalıştığını, istek ve yanıt döngüsünü anlamak öğrenme eğrisini belirgin biçimde kısaltır.

Üretime çıkmadan önce hangi güvenlik kontrolleri yapılmalı?

HTTPS zorunlu kılınmalı, bağlantı dizeleri user secrets veya ortam değişkeninde tutulmalı, detaylı hata sayfası kapatılmalı, antiforgery token üretilen formlarda etkin olmalı, kullanıcı girişlerinin hepsi sunucu tarafında doğrulanmalı, bağımlılıklar güncel sürüme çekilmeli ve OWASP'ın temel kontrol listesi en az bir kez gözden geçirilmelidir.

ASP.NET ile site yapımı, ilk komutta bitmiş gibi göründüğü için yanıltıcı olabilir. Asıl iş şablonun ürettiği iskeletin üzerine kendi alan kurallarınızı, kullanıcı akışlarınızı ve veri modelinizi oturtmaya başladığınızda ortaya çıkıyor. Bu yüzden küçük bir sayfayla başlayıp her hafta tek bir katmana derinleşmek, üç ayda hiçbir yere varmayan büyük plana göre çok daha hızlı ilerletir.