Erkan KESER

Asp.net Core - Controller Katmanı

Asp.net Core ile MVC deseninde kullanılan Controller katmanı anlatılmaktadır.

Controller Katmanı

MVC tasarım deseninde controller katmanı; içinde barındırdığı action metotları ile birlikte tarayıcıdan gelen sayfa isteklerini (URL) yöneten, view ve model katmanları arasındaki bağlantıyı sağlayan ve projenin iş sürecini kontrol eden katmandır.

Controller Yapısı

using Microsoft.AspNetCore.Mvc;
public class HomeController: Controller
{
	public ActionResult Index()
	{
		return View();
	}
	// Diğer action metotlar tanımlanır
}

Action metotlar genellikle view döndürmek için kullanılır. Yukarıdaki örnekte Views klasörü altındaki Home alt klasöründe yer alan Index.cshtml adlı dosya döndürülmektedir.

Action Metotlar

Temel olarak controller sınıfında public olarak tanımlanan tüm metotlar action metot olarak isimlendirilir. Her bir controller sınıfı için Index() adlı metot varsayılan action metodudur. Yani action belirtilmediğinde çalışacak metot, Index() metodudur.
Her bir action metodu;
• View (View katmanındaki ilgili dosya),
• Dosya (Resim, video, vb.),
• JSON (JavaScript Object Notation)
• string ve int gibi C# veri tipleri, gibi çeşitli tiplerde değer (ActionResult) döndürebilir ya da bir başka controller / actiona yönlendirme yapabilir.

Action Metot Geri Dönüş Uygulamaları

JSON Döndüren Metot

public JsonResult Json()
{
    return Json(new
    {
        Id = 1,
        AdSoyad= "Ali Kurt",
        Meslek= "Öğrenci"
    });
}

veya

public IActionResult GetOgrenci()
{
    var ogrenci = new { Ad = "Ahmet", Soyad = "Yılmaz", Yas = 20 };
    return Json(ogrenci);
}

Dosya Döndüren Metot

public FileResult Resim()
{
    return File("~/profile.png", "image/png");
}

Not: ~ simgesi wwwroot klasörünü ifade eder.

Geriye Değer(String) Döndüren Metot

public string Liste()
{
    return "Geriye String Döndüren Metot";
}

Parametreli Geriye Değer(String) Döndüren Metot

public string Metin(String isim)
{
    return $"Parametre Değeri = {isim}";
}

Tarayıcıdan parametre göndermek için http://localhost:5000/Home/Metin?isim=Ahmet adresi girilir.

Route Nedir?

Route, gelen HTTP isteklerini belirli Controller ve Action metodlarına yönlendirmek için kullanılan bir mekanizmadır. 

[Route] attribute'u ile Controller veya Action seviyesinde özelleştirilmiş Route'lar tanımlanabilir.

[Route("Home/Yazi/{id}")]
public string Yazi(int id)
{
    return $"Yazı linkinden alınan id = {id}";
}

[Route("Home/Yazi/{id}/{ad}")]
public string Yazi(int id, string ad)
{
    return $"Parametreden gelen id={id}, ad={ad}";
}

URL Yapıları:

Home/yazi/5: yazi Action'ını çağırır ve id parametresini 5 olarak ayarlar.

Home/yazi/8/ali : yazi Action'ını çağırır ve id parametresini 8 olarak ayarlar ve ad parametresini ali olarak ayarlar.

Route Parametreleri
Route'lar içinde parametreler tanımlanabilir. Bu parametreler, Action metodlarına otomatik olarak bağlanır.

[Route("ogrenci/{action}/{id?}")]

Açıklama

ogrenci/detay/5 : Detay Action'ını çağırır ve id parametresini 5 olarak ayarlar.

ogrenci/detay : Detay Action'ını çağırır ve id parametresi opsiyonel olduğu için null olur.

 Route parametrelerine kısıtlamalar ekleyerek, belirli türde veya formatta veri gelmesini sağlayabilirsiniz.

[Route("ogrenci/{id:int}")]

Açıklama

  • ogrenci/5 : Geçerli (id bir tam sayıdır).
  • ogrenci/abc : Geçersiz (id bir tam sayı olmalıdır).

Yaygın kısıtlamalar

  • {id:int} : Sadece tam sayı kabul eder.
  • {isim:alpha} : Sadece harf kabul eder.
  • {tarih:datetime} :  Geçerli bir tarih formatı kabul eder.

 Route belirtilmezse parametreli işlem yapılır.