Skip to content

Latest commit

 

History

History
452 lines (309 loc) · 17.5 KB

D02.md

File metadata and controls

452 lines (309 loc) · 17.5 KB

2. Routing ve Controller

Asp.Net Core MVC’nin gücünü ortaya çıkaran en temel bileşenlerden biri, Routing ve Controller mekanizmalarıdır. Bu bölümde, bir web uygulamasının nasıl çalıştığını ve kullanıcının tarayıcısından gelen bir isteğin nasıl doğru hedefe yönlendirildiğini keşfedeceğiz.

Routing, bir isteğin doğru kontrolöre ve aksiyon metoduna nasıl yönlendirileceğini belirleyen sistemdir. Asp.Net Core MVC'de routing, uygulama akışını organize eden kritik bir yapı taşını oluşturur. Kullanıcının yaptığı bir arama veya tıkladığı bir bağlantı, routing sayesinde ilgili işlemi gerçekleştiren doğru kod bloğuna ulaşır.

Bu yönlendirme işlemi bir kez tamamlandığında, devreye Controller girer. Controller, isteği işleyen, veriyi hazırlayan ve sonucu uygun bir şekilde kullanıcıya sunan yapı taşıdır. Controller’lar olmadan, kullanıcının taleplerini anlamak ve bunları işlemek mümkün değildir.

Bu bölümde, öncelikle routing'in nasıl çalıştığını, ardından bir kontrolörün nasıl oluşturulacağını ve bu kontrolörlerde kullanılan action metotları ile parametrelerin işlevlerini öğreneceğiz. Asp.Net Core MVC’nin esnek routing mekanizmasının nasıl özelleştirilebileceğini ve kontrolörlerin uygulamalarınızın "beyni" olarak nasıl çalıştığını kavrayacağız.

Gelin, bu kritik bileşenlerin detaylarına birlikte göz atalım!

2.1. Routing nedir ve nasıl çalışır?

Routing Nedir?

Routing, Asp.Net Core MVC’de kullanıcıdan gelen HTTP isteklerini doğru kontrolör ve aksiyon metoduna yönlendiren bir mekanizmadır. Bir başka deyişle, bir web uygulamasında hangi isteğin hangi kod parçası tarafından işleneceğini belirleyen sistemdir. Routing sayesinde, kullanıcılar tarayıcı adres çubuğuna bir URL girdiğinde ya da bir bağlantıya tıkladığında, bu talep doğru bir şekilde ele alınır ve uygun bir yanıt döndürülür.

Asp.Net Core MVC’nin routing sistemi oldukça esnektir ve farklı ihtiyaçlara göre özelleştirilebilir. Bu sistem, hem geleneksel URL desenlerini hem de RESTful URL yapılarını destekler.

Routing Nasıl Çalışır?

Routing, temel olarak şu iki bileşenden oluşur:

  1. Route Templates (Yönlendirme Şablonları):
    Route şablonları, URL’nin nasıl yapılandırılacağını belirler. Örneğin:

    /Home/Index
    /Products/Details/{id}
    

    Bu şablonlar, hangi kontrolör ve aksiyon metodunun çağrılacağını tanımlar.

  2. Middleware (Ara Yazılım):
    Routing işlemi, uygulamanın başlatılması sırasında yapılandırılır ve gelen tüm HTTP isteklerini ele alır. Middleware, URL’yi çözümleyerek isteği ilgili kontrolöre yönlendirir.

Routing Türleri

Asp.Net Core MVC’de routing iki ana şekilde yapılandırılabilir:

  1. Convention-Based Routing (Geleneksel Yönlendirme):
    Geleneksel yönlendirme, genellikle Startup.cs ya da Program.cs dosyasında yapılandırılır. Burada, uygulamanın genel rotaları tanımlanır. Örneğin:

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });

    Bu yapılandırma, varsayılan olarak HomeController ve Index aksiyon metoduna yönlendirir.

  2. Attribute-Based Routing (Öznitelik Tabanlı Yönlendirme):
    Bu yöntem, rotaların doğrudan kontrolör ve aksiyon metotlarına uygulanmasını sağlar. Örneğin:

    [Route("products/details/{id?}")]
    public IActionResult Details(int id)
    {
        // İşlem kodu
    }

    Bu yöntem, daha esnek ve özelleştirilebilir bir yönlendirme sunar.

Routing Örneği

Aşağıda basit bir yönlendirme örneği verilmiştir:

URL: /Products/Details/5

Yönlendirme Şablonu: {controller=Home}/{action=Index}/{id?}

  1. Controller: ProductsController
  2. Action: Details
  3. Parameter: id = 5

Kod örneği:

public class ProductsController : Controller
{
    public IActionResult Details(int id)
    {
        // Veriyi işleme kodu
        return View();
    }
}

Routing ve RESTful API'ler

Routing, yalnızca web sayfaları için değil, aynı zamanda RESTful API’ler geliştirmek için de kritik bir öneme sahiptir. RESTful mimaride, URL’ler veri kaynaklarını temsil eder. Örneğin:

  • /api/products → Tüm ürünleri getirir.
  • /api/products/5 → Belirli bir ürünü getirir.

Atıflar ve İleri Okuma

Routing’in temel çalışma mantığını kavradığınızda, Asp.Net Core MVC’nin işleyişinde önemli bir yol kat etmiş olursunuz. Daha önce ele aldığımız MVC Mimarisi ve Bileşenleri başlığı, bu mekanizmanın nasıl yapılandığını anlamanızda faydalı olabilir. Ayrıca, Proje Yapısı ve Dosya Organizasyonu bölümünde kontrolörlerin yer aldığı dosya yapısını tekrar inceleyebilirsiniz.

Sonuç

Routing, bir web uygulamasında kullanıcı isteklerinin doğru bir şekilde işlenmesini sağlayan kritik bir yapı taşıdır. Asp.Net Core MVC’nin sunduğu güçlü ve esnek routing sistemi, geleneksel ve RESTful yönlendirme ihtiyaçlarını başarıyla karşılar. Bir sonraki bölümde, yönlendirme ile kontrolörlerin nasıl entegre çalıştığını ve kontrolörlerin yapısını detaylıca inceleyeceğiz!

2.2. Controller nedir ve nasıl oluşturulur?

Controller Nedir?

Controller, Asp.Net Core MVC uygulamalarında kullanıcıdan gelen istekleri işleyen, iş mantığını yöneten ve uygun yanıtları kullanıcıya dönen bir bileşendir. Controller’lar, uygulamanızın "beyni" gibi çalışır. Kullanıcıdan bir talep geldiğinde, bu talep routing mekanizması tarafından uygun bir controller’a yönlendirilir. Controller, gelen talebi işler, gerekirse model katmanından veri alır ve sonucu bir view aracılığıyla kullanıcıya sunar.

Kısacası, controller’lar bir uygulamada şu işlevleri yerine getirir:

  • HTTP isteklerini kabul eder ve işler.
  • İlgili iş mantığını çalıştırır.
  • Uygun bir response (yanıt) döner: HTML sayfası, JSON verisi veya başka bir formatta.

Controller Nasıl Çalışır?

Asp.Net Core MVC'de bir controller, genellikle Controller taban sınıfından türeyen bir C# sınıfıdır. Bu sınıf, bir dizi action method içerir. Action methodlar, belirli bir işlemi gerçekleştiren fonksiyonlardır.

Örnek Bir Controller:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult About()
    {
        return Content("Hakkında Sayfası");
    }
}

Yukarıdaki örnekte:

  • Index metodu, View döner ve bu, kullanıcıya bir HTML sayfası sunar.
  • About metodu, sadece düz metin içeren bir yanıt döner.

Controller Nasıl Oluşturulur?

Asp.Net Core MVC'de yeni bir controller oluşturmak oldukça kolaydır. İzlenecek adımlar şu şekildedir:

  1. Yeni Bir Controller Sınıfı Oluşturma

    • Projede /Controllers klasörüne gidin.
    • Sağ tıklayın ve “Add > Controller” seçeneğini seçin veya yeni bir C# sınıfı oluşturun.
  2. Controller Taban Sınıfından Türetme

    • Yeni oluşturduğunuz sınıfı Controller sınıfından türetin:
      public class ProductsController : Controller
      {
          public IActionResult Index()
          {
              return View();
          }
      }
  3. Action Metotlarını Tanımlama

    • Kullanıcı isteklerini işlemek için action metotları ekleyin. Her bir action metodu, bir kullanıcı isteğine yanıt verecek şekilde tasarlanır.
  4. Routing ile Entegrasyon

    • Controller’ı bir routing şablonuyla ilişkilendirin. Örneğin:
      /Products/Index
      

Controller’ın Temel Bileşenleri

  1. Base Class (Taban Sınıf):

    • Controller sınıfları genellikle Microsoft.AspNetCore.Mvc.Controller sınıfından türetilir.
  2. Action Metotlar:

    • HTTP isteklerini işleyen metotlardır. Bu metotlar IActionResult veya türevlerini döner.
  3. Dependency Injection:

    • Controller'larda servisleri veya veritabanı bağlantılarını enjekte edebilirsiniz:
      private readonly IProductService _productService;
      
      public ProductsController(IProductService productService)
      {
          _productService = productService;
      }
  4. Filters (Filtreler):

    • Controller veya action seviyesinde yetkilendirme, hata yönetimi gibi işlemleri uygulamak için kullanılır.

Örnek Uygulama: Bir Blog Controller’ı

Kod Örneği:

public class BlogController : Controller
{
    public IActionResult List()
    {
        return View();
    }

    public IActionResult Details(int id)
    {
        var blogPost = GetBlogPostById(id); // Örnek bir işlem
        return View(blogPost);
    }
}

Yukarıdaki controller, iki action metodu içerir:

  • List: Tüm blog yazılarını listeleyen bir görünüm döner.
  • Details: Belirli bir blog yazısının detaylarını gösterir.

Controller ve Routing İlişkisi

Controller’lar, routing mekanizması tarafından çağrılır. Routing Nedir ve Nasıl Çalışır? başlığında bahsedildiği gibi, URL şablonları bir controller ve action metotla eşleşir. Örneğin:

  • URL: /Blog/Details/3
  • Controller: BlogController
  • Action: Details
  • Parameter: id = 3

Atıflar ve Ek Kaynaklar

Bu başlık, Asp.Net Core MVC’nin temel taşlarından biri olan controller’ların ne olduğunu ve nasıl oluşturulduğunu ele aldı. Daha fazla bilgi için Giriş ve Temel Kavramlar ve MVC Mimarisi ve Bileşenleri bölümlerine göz atabilirsiniz.

Sonuç

Controller’lar, Asp.Net Core MVC uygulamalarında kullanıcı isteklerini işleyen merkezi bileşenlerdir. Routing ile entegre çalışarak doğru iş mantığını işler ve kullanıcıya uygun yanıtı sunar. Bir sonraki bölümde, controller'larda kullanılan action metotları ve parametreler konusuna odaklanacağız.

2.3. Action metodları ve parametreler

Action Metotları Nedir?

Action metotları, Asp.Net Core MVC uygulamalarında bir kontrolör sınıfındaki belirli işlemleri temsil eden fonksiyonlardır. Kullanıcıdan gelen bir HTTP isteği, routing mekanizması sayesinde uygun bir action metoda yönlendirilir. Bu metot, isteği işler, gerekirse veriyle etkileşim kurar ve bir yanıt döner.

Action metotları, genellikle aşağıdaki görevleri yerine getirir:

  • Kullanıcıdan gelen HTTP isteklerini işler (GET, POST, PUT, DELETE vb.).
  • İlgili iş mantığını yürütür.
  • Yanıt olarak bir View, JSON, veya başka bir formatta veri döner.

Action Metodu Nasıl Yazılır?

Bir action metodu, public bir fonksiyon olarak yazılır ve genellikle bir IActionResult veya Task<IActionResult> döner.

Basit Bir Action Metodu Örneği:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Details(int id)
    {
        return Content($"Detay ID: {id}");
    }
}
  • Index: Varsayılan bir görünüm döner (Index.cshtml).
  • Details: id parametresini kullanarak basit bir metin döner.

HTTP İstek Türleri ve Action Metotları

Asp.Net Core MVC, farklı HTTP istek türlerini işlemek için özel özniteliklere sahiptir. En yaygın kullanılanlar şunlardır:

  1. [HttpGet]

    • Veri almak için kullanılır.
    • Örnek:
      [HttpGet]
      public IActionResult List()
      {
          return View();
      }
  2. [HttpPost]

    • Veri göndermek için kullanılır.
    • Örnek:
      [HttpPost]
      public IActionResult Save(Product product)
      {
          // Veriyi kaydetme işlemi
          return RedirectToAction("List");
      }
  3. [HttpPut]

    • Mevcut bir veriyi güncellemek için kullanılır.
  4. [HttpDelete]

    • Veri silme işlemleri için kullanılır.

Parametreler ve Model Binding

Action metotlarına gelen isteklerle birlikte veri de gönderilebilir. Asp.Net Core MVC, bu verileri otomatik olarak action metotlarına bağlar. Bu sürece Model Binding adı verilir.

Örnek 1: URL Parametreleri

public IActionResult Details(int id)
{
    return Content($"Ürün ID: {id}");
}
  • URL: /Products/Details/3
  • Parametre: id = 3

Örnek 2: Query String

public IActionResult Search(string query)
{
    return Content($"Arama: {query}");
}
  • URL: /Products/Search?query=bilgisayar
  • Parametre: query = bilgisayar

Örnek 3: Form Verileri

[HttpPost]
public IActionResult Submit(string name, int age)
{
    return Content($"Ad: {name}, Yaş: {age}");
}

Formdan gelen name ve age parametreleri metoda otomatik olarak bağlanır.

Geri Dönüş Türleri

Action metotları çeşitli türlerde yanıt dönebilir:

  1. ViewResult: Bir görünüm döner (return View();).
  2. JsonResult: JSON formatında veri döner (return Json(data);).
  3. ContentResult: Düz metin döner (return Content("Hello World");).
  4. RedirectResult: Başka bir URL’ye yönlendirir (return Redirect("https://example.com");).

Örnek: CRUD İşlemleri

Bir ürün yönetim sistemi için temel CRUD işlemlerini ele alalım:

Controller:

public class ProductsController : Controller
{
    [HttpGet]
    public IActionResult List()
    {
        // Tüm ürünleri listele
        return View();
    }

    [HttpGet]
    public IActionResult Details(int id)
    {
        // Belirli bir ürünü getir
        return View();
    }

    [HttpPost]
    public IActionResult Create(Product product)
    {
        // Yeni ürün oluştur
        return RedirectToAction("List");
    }

    [HttpPost]
    public IActionResult Delete(int id)
    {
        // Ürünü sil
        return RedirectToAction("List");
    }
}

Atıflar ve İleri Okuma

Sonuç

Action metotları ve parametreler, Asp.Net Core MVC uygulamalarında kullanıcı isteklerini işleyen temel yapı taşlarıdır. Doğru bir şekilde tanımlandıklarında, kullanıcı isteklerine yanıt verme sürecini hızlı ve etkili hale getirir. Bir sonraki aşamada, bu metotların test edilmesi ve geliştirilmesi konularına odaklanabilirsiniz!

Bölüm Sonu: Routing ve Controller’ın Özeti

Geriye Bakış: Routing ve Controller

Bu bölümde, Asp.Net Core MVC’nin temel yapı taşlarından biri olan Routing ve Controller kavramlarını detaylı bir şekilde ele aldık. Kullanıcının bir web uygulamasında yaptığı talebin doğru bir şekilde işlenmesi için bu iki kavramın nasıl birlikte çalıştığını öğrendik.

  1. Routing Nedir ve Nasıl Çalışır?

    • Routing mekanizmasının, kullanıcı isteklerini uygun kontrolörlere yönlendiren bir sistem olduğunu gördük.
    • Routing türlerini (Convention-Based ve Attribute-Based) ve bu türlerin nasıl kullanıldığını inceledik.
      Daha fazla detay için Routing Nedir ve Nasıl Çalışır? başlığına göz atabilirsiniz.
  2. Controller Nedir ve Nasıl Oluşturulur?

    • Controller’ların bir uygulamada gelen talepleri işlemek ve yanıt döndürmek için kullanılan sınıflar olduğunu öğrendik.
    • Controller’ların yapısını ve işlevlerini, action metotlarla nasıl çalıştığını ele aldık.
      Detaylı bilgi için Controller Nedir ve Nasıl Oluşturulur? başlığına dönebilirsiniz.
  3. Action Metotları ve Parametreler

    • Action metotlarının, bir kontrolörün çekirdeğini oluşturduğunu ve kullanıcı isteklerini işlediğini gördük.
    • Bu metotların nasıl parametreler alabildiğini ve farklı HTTP istek türlerini nasıl işleyebileceğini inceledik.
      Daha fazla bilgi için Action Metotları ve Parametreler başlığını inceleyebilirsiniz.

İleriye Bakış: View ve Razor

Bu noktada, bir web uygulamasının temel işleyişini oluşturan backend bileşenlerini öğrendik. Şimdi ise kullanıcıya sunulan arayüzlerin nasıl oluşturulduğunu ve görselleştirildiğini öğrenme zamanı geldi. 3. View ve Razor başlıklı bölümde şunları ele alacağız:

  • View’ların Yapısı ve İşlevi: Kullanıcıya sunulan arayüzlerin nasıl oluşturulduğunu anlayacağız.
  • Razor Syntax: Dinamik HTML içerikleri üretmek için kullanılan Razor dilini keşfedeceğiz.
  • Layout ve Partial View’lar: Tekrarlayan arayüz bileşenlerinin nasıl yönetileceğini göreceğiz.

Routing ve Controller mekanizmalarını kavradıysanız, View ve Razor konuları ile Asp.Net Core MVC’nin gücünü bir adım öteye taşıyabilirsiniz. Bir sonraki bölümde görüşmek üzere!