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.
Her bir controller, Microsoft.AspNetCore.Mvc.Controller sınıfından türetilen bir C# sınıfıdır ve içerisinde action metotlarını barındırır. Sınıf isimlendirmesinde dikkat edilmesi gereken husus; sınıf adının “Controller” kelimesi ile bitmesi gerektiğidir. Örneğin; Anasayfa controller sınıfının adı HomeController, Personel controller sınıfının adı PersonelController olmalıdır. Önemli bir diğer husus da controller sınıflarının, projenin ana dizininde bulunan Controllers alt klasörü altında yer alması gerektiğidir.
Tarayıcıdan gelen https://localhost:5001/Personel/xxx şeklindeki bir istek Personel controller tarafından yönetilecek anlamına gelir. Sondaki xxx controller içerisindeki bu isimdeki action metodu tarafından kontrol edilir.
Projeye yeni bir controller eklemek için Controllers klasörü üzerindeyken farenin sağ tuşuna basarak Add komutu çalıştırılır. Buradan Contoller seçilir. Mvc controller- Emtpy seçiliyken Add komutuna basılır. Controller ismi olarak PersonelController yazılır ve Add diyerek dosya oluşturulur. Dosyadaki kodlar aşağıdaki gibi oluşur.
public class PersonelController : Controller
{
public IActionResult Index()
{
return View();
}
}
Action metotlar genellikle view döndürmek için kullanılır. Yukarıdaki örnekte Views klasörü altındaki Personel alt klasöründe yer alan Index.cshtml adlı dosya döndürülmektedir (Views> Personel>Index.cshtml).
Controller sınıfı tanımlandıktan sonra, proje ihtiyaçlarına uygun action metotlar oluşturulmalıdır. Index adlı action metot, https://localhost:5001/Personel/ gibi sonda action belirtilmediği durumlarda çalışan metottur. Aynı şekilde https://localhost:5001/Personel/Index şeklinde de çağrılabilir. Bu action metot şu şekilde test edilebilir:
public string Index()
{
return "Personel controller sınıfındaki Index metodu çalıştı";
}
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.
Şimdi bunları sırasıyla görelim.
JSON döndüren action metot
Piyasada bulunan tüm programlar yayınlayacağı bilgileri json formatında oluştururlar. Bu bilgilere ihtiyaç duyan programcılar bu formatı okuyarak istedikleri bilgiyi çekebilirler.
public JsonResult JsonCikti()
{
JsonResult result = Json(new
{
Id = 1,
Adi = "Ahmet",
Soyadi = "Yaman",
Maas = 1250.5f
});
return result;
}
Resim dosyası döndüren action metot
Verilen bilgiler ışığında bir resim dosyası elde edilip görüntülenecekse bu action metod kullanılır. Resimler wwwroot klasörü altında saklanmaktadır.
public FileResult Resim()
{
return File("~/smile.png", "image/png");
}
ViewResult döndüren action metot
Bu metot view dosyasının tamamını oluşturarak client tarafına gönderir. Bu işlemi yaparken _ViewStart genel dosyası dahil tüm dosyayı işleyerek gönderir.
public ViewResult Olustur()
{
ViewResult result = View();
return result;
}
PartialViewResult döndüren action metot
Bu metot view dosyasıyla görüntülenen web sayfasının bir kısmını oluşturmak için kullanılır. Web sayfasının bir kısmını oluşturmak veya ajax işlemleriyle client tarafında işlem yapılacaksa bu action metot kullanılır.
public PartialViewResult Olustur()
{
PartialViewResult result = PartialView();
return result;
}
EmptyResult döndüren action metot
Bazen kullanıcıdan alınan değerlerin sonucunda kullanıcıya herhangi bir değer göndermek istemeyebiliriz. Bu durumda bu metodu kullanabiliriz.
public EmptyResult Olustur()
{
return new EmptyResult();
}
ContentResult döndüren action metot
İstek sonucunda geriye metinsen bir değer döndüreceksek bu metodu kullanabiliriz.
public ContentResult Olustur()
{
ContentResult result = Content("İşlem başarılı...");
return result;
}
ActionResult döndüren action metot
Gelen istek sonucunda geriye döndürülecek action türleri değişkenllik gösterebilir. Bu metodu kullanarak istenilen action metodunu seçerek isteklere cevap verebilirsibiz. Bu metot bir bakıma diğer tüm metodların anasıdır.
public ActionResult Sonuc()
{
if (true)
{
return Json(new object());
}
}
Bu action metoduyla ayni işlemi yapan IActionResult deyimidir. Kullanıcının istediği formata göre bilgilerin gönderilmesinde kullanılabilir. Genellikle bu metot controller sınıfında sürekli kullanılmaktadır.