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.