İçeriğe geç

Controller’lar ve Action Method’lar: ASP.NET MVC’de İstek Yönetimi

ASP.NET Core, modern, bulut tabanlı ve internete bağlı uygulamalar oluşturmak için kullanılan güçlü bir framework’tür. Bu framework’ün kalbinde, Model-View-Controller (MVC) tasarım deseni yer alır. MVC’nin en kritik bileşenlerinden biri olan Controller, kullanıcıdan gelen istekleri karşılayan, gerekli iş mantığını yürüten ve kullanıcıya geri dönecek yanıtı oluşturan merkezi birimdir. Bu yazıda, ASP.NET Core uygulamalarının temel taşı olan Controller sınıflarının nasıl oluşturulduğunu derinlemesine inceleyeceğiz. Action method’larının görevlerini, nasıl çalıştıklarını ve farklı senaryolara göre hangi yanıt türlerini üretebildiklerini ele alacağız. Ayrıca, bir URL’nin doğru Controller ve Action’a nasıl yönlendirildiğini belirleyen Routing mekanizmasının temellerine de değineceğiz.

Controller sınıflarının temelleri ve oluşturulması

Bir ASP.NET Core MVC uygulamasında Controller, kullanıcı etkileşimini yöneten bir C# sınıfıdır. Görevi, gelen HTTP isteklerini (GET, POST, PUT, DELETE vb.) almak, bu isteklere göre uygulamanın model katmanıyla (veri ve iş mantığı) etkileşime geçmek ve son olarak kullanıcıya sunulacak olan View’ı veya başka bir tür yanıtı seçmektir. Kısacası, Controller, kullanıcı ile uygulama arasındaki köprüyü kurar.

Bir Controller sınıfı oluşturmak için temel kurallar şunlardır:

  • Sınıf, public erişim belirleyicisine sahip olmalıdır.
  • Sınıfın adı “Controller” sonekiyle bitmelidir (Örneğin: HomeController, ProductController). Bu bir zorunluluk olmasa da, framework’ün varsayılan yönlendirme (routing) mekanizmaları bu kurala dayanır.
  • Sınıf, Microsoft.AspNetCore.Mvc.Controller sınıfından kalıtım almalıdır. Bu temel sınıf, Action method’larının ihtiyaç duyacağı birçok yardımcı metot ve özellik (örneğin, View(), Json(), Redirect()) barındırır.

Aşağıda basit bir HomeController örneği yer almaktadır:


using Microsoft.AspNetCore.Mvc;

namespace WebApplication.Controllers
{
public class HomeController : Controller
{
// Bu bir Action Method’dur.
public IActionResult Index()
{
// “Index.cshtml” adlı View’ı render eder.
return View();
}

public IActionResult Privacy()
{
return View();
}
}
}

Action method’ları ve görevleri

Action method’ları, bir Controller sınıfı içinde yer alan ve belirli bir URL isteğine yanıt veren public metotlardır. Her bir Action, uygulamanın gerçekleştirebileceği tek bir eylemi temsil eder. Örneğin, bir ürün listesini göstermek, yeni bir kullanıcı kaydetmek veya bir makaleyi silmek gibi işlemler ayrı Action method’ları tarafından yönetilir.

Bir Action method’unun temel özellikleri şunlardır:

  • Parametreler: Action method’ları, URL’den (route data), sorgu dizesinden (query string) veya istek gövdesinden (request body) gelen verileri parametre olarak alabilirler. Framework, bu verileri otomatik olarak metoda geçirir (model binding).
  • Geri Dönüş Türü: Bir Action method’u, genellikle IActionResult arayüzünü uygulayan bir nesne döndürür. Bu arayüz, HTTP yanıtının nasıl oluşturulacağını belirleyen esnek bir yapı sunar. Bu sayede bir Action, duruma göre bir HTML sayfası, JSON verisi veya bir yönlendirme yanıtı gibi farklı sonuçlar üretebilir.

Örneğin, belirli bir ID’ye sahip ürünün detaylarını gösteren bir Action method’u aşağıdaki gibi olabilir:


public class ProductController : Controller
{
public IActionResult Details(int id)
{
// Veritabanından id’ye göre ürün aranır.
var product = GetProductById(id);

if (product == null)
{
// Ürün bulunamazsa 404 Not Found hatası döndürülür.
return NotFound();
}

// Ürün bilgisi View’a model olarak gönderilir.
return View(product);
}
}

Yukarıdaki örnekte Details metodu, URL’den gelen id parametresini alır. Eğer bu ID’ye sahip bir ürün bulunamazsa NotFoundResult döndürür, bulunursa ürün verisiyle birlikte bir ViewResult oluşturur.

ActionResult türleri ve kullanım senaryoları

IActionResult, bir Action method’unun döndürebileceği farklı yanıt türlerini temsil eden bir arayüzdür. Bu yapı, bir Action’ın dinamik olarak farklı sonuçlar üretmesini sağlar. En sık kullanılan ActionResult türleri şunlardır:

ActionResult Türü Açıklama Örnek Kullanım
ViewResult Kullanıcının tarayıcısında render edilecek bir HTML sayfası (View) döndürür. En yaygın kullanılan sonuç türüdür. return View(productModel);
JsonResult AJAX isteklerine veya web API’lerine yanıt olarak JSON formatında veri döndürür. return Json(new { success = true, message = “İşlem başarılı.” });
RedirectResult / RedirectToActionResult Kullanıcıyı farklı bir URL’ye veya uygulamadaki başka bir Controller/Action’a yönlendirir. Genellikle bir POST işleminden sonra kullanılır. return RedirectToAction(“Index”, “Home”);
ContentResult Belirtilen içerik türüyle (text/plain, text/html vb.) ham metin içeriği döndürür. return Content(“Bu bir metin yanıtıdır.”);
FileResult Kullanıcının bir dosya indirmesini sağlar. PDF, Excel, resim dosyaları gibi içerikler için kullanılır. return File(fileBytes, “application/pdf”, “rapor.pdf”);
NotFoundResult HTTP 404 (Not Found) durum kodunu döndürür. İstenen kaynak bulunamadığında kullanılır. return NotFound();
OkResult / BadRequestResult Sırasıyla HTTP 200 (OK) veya HTTP 400 (Bad Request) gibi belirli durum kodlarını döndürür. Genellikle API’lerde kullanılır. return Ok(); veya return BadRequest(“Geçersiz istek.”);

Routing mekanizmasının temelleri

Routing (Yönlendirme), gelen bir URL isteğinin hangi Controller ve hangi Action method’u tarafından işleneceğini belirleyen mekanizmadır. ASP.NET Core, bu eşleştirmeyi yapmak için son derece esnek bir yapı sunar. İki temel yönlendirme yaklaşımı vardır:

  1. Convention-based Routing (Kural Tabanlı Yönlendirme): Bu yaklaşımda, yönlendirme kuralları merkezi bir yerde (genellikle Program.cs dosyasında) tanımlanır. Varsayılan şablon genellikle şöyledir: “{controller=Home}/{action=Index}/{id?}”. Bu şablon, URL’yi parçalara ayırır:
    • {controller=Home}: URL’nin ilk segmenti Controller adını belirtir. Eğer bu segment boş bırakılırsa varsayılan olarak Home Controller kullanılır.
    • {action=Index}: İkinci segment, çalıştırılacak Action method’unu belirtir. Boş bırakılırsa varsayılan olarak Index Action’ı çalışır.
    • {id?}: Üçüncü segment isteğe bağlı (soru işareti nedeniyle) bir parametre olan id‘yi temsil eder.

    Örneğin, /Product/List URL’si, ProductController içindeki List() Action’ını hedefler.

  2. Attribute-based Routing (Nitelik Tabanlı Yönlendirme): Bu yaklaşımda, yönlendirme kuralları doğrudan Controller sınıflarının veya Action method’larının üzerine [Route], [HttpGet], [HttpPost] gibi nitelikler (attributes) eklenerek tanımlanır. Bu yöntem, özellikle RESTful API’ler oluştururken URL yapıları üzerinde daha hassas kontrol sağlar.
    [Route(“api/[controller]”)]
    [ApiController]
    public class ItemsController : ControllerBase
    {
    [HttpGet(“{id}”)] // api/items/5 gibi bir URL’yi eşler
    public IActionResult GetItem(int id)
    {
    // …
    }
    }

Sonuç olarak, ASP.NET Core MVC mimarisinin temelini anlama yolculuğu, Controller ve Action method’larını kavramaktan geçer. Controller’lar, uygulamanın beyinleri olarak gelen istekleri organize eder, iş mantığını tetikler ve son kullanıcıya verilecek yanıtı şekillendirir. Action method’ları ise bu Controller’lar içindeki özelleşmiş işçilerdir; her biri belirli bir görevi yerine getirir ve IActionResult arayüzünün sunduğu esneklik sayesinde HTML’den JSON’a, dosya indirmeden yönlendirmelere kadar çok çeşitli yanıtlar üretebilir. Routing mekanizması ise bu yapıyı bir araya getiren yapıştırıcıdır; kullanıcıların tarayıcıya yazdığı URL’leri anlamlı eylemlere dönüştürerek doğru Action’ın çağrılmasını sağlar. Bu üç temel bileşenin uyum içinde çalışması, ölçeklenebilir, test edilebilir ve bakımı kolay web uygulamaları geliştirmenin anahtarını oluşturur.