ASP.NET MVC Controller

Paylaş

ASP.NET MVC içerisinde gelen isteklere uygun bir cevap vermek için kullanılan controller, action ve selector ile ilgili bilgiler yer alıyor.

Controller nedir?

MVC içerisindeki en önemli katman olan Controller, Routing tarafından alınan isteklere uygun bir cevap vermek için kullanılır.

Routing hakkında detaylı bilgi için ASP.NET MVC Routing yazıma bakabilirsin.

Örnek Controller yapısı aşağıda yer almaktadır.

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

Buradaki View metodu Controller sınıfında yer alan ve bir NYP özelliği olan kalıtım ile miras alınarak kullanılmıştır.

Benzer şekilde Controller ve ControllerBase sınıfında yer alan Json, Redirect gibi metotlarda kullanılabilir.

Controller actions

Controller işlemi bitirdikten sonra cevap olarak bir değer döndürür.

Bu değer ActionResult soyut sınıfından türeyen veya IActionResult arayüzünü kullanan aşağıdaki sınıflar olabilir.

ActionsController metodu
ContentResultContent()
FileResultFile()
FilePathResultFile()
HttpStatusCodeResult
EmptyResult
JavaScriptResultJavaScript()
JsonResultJson()
RedirectResultRedirect()
HttpNotFoundResultHttpNotFound()
RedirectToRouteResultRedirectToAction() – RedirectToRoute()
ViewResultView()
PartialViewResultPartialView()

Yukarıda yer alan View metodunun yaptığı işlem aşağıda işlemin aynısıdır.

public class HomeController : Controller
{
    public ActionResult Index()
    {
            return new ViewResult();
    }
}

Benzer şekilde diğer dönüş türleri de oluşturulabilir.

Ancak Controller sınıfı içerisinde bu işlemi bizim yerimize yapan ve overload edilmiş metotları kullanmak karmaşıklığı azaltacaktır.

public ActionResult Index()
{
    //return Content("Merhaba ben Yusuf Sezer");
    //return Redirect("https://www.yusufsezer.com.tr");
    //return HttpNotFound()
    return Json(new { adi = "Yusuf", soyadi = "SEZER" }, JsonRequestBehavior.AllowGet);
}

Controller selectors

Controller katmanında yer alan metotların hepsi isteğe cevap vermek zorunda değildir.

Ayrıca bir isteği farklı bir metoda yönlendirebiliriz.

Bu gibi işlemler için ActionName, NoAction ve ActionVerbs nitelikleri kullanılır.

Aşağıdaki Index metoduna Controller/ozel-sayfa olarak erişilir.

OzelBirMetot metoduna eklenen NonAction ile metodun action olmadığını belirttik.

Yani Controller/OzelBirMetot ile erişilemeyecektir.

[ActionName("ozel-sayfa")]
public ActionResult Index()
{
    return Content("Merhaba ben Yusuf Sezer");
}

[NonAction]
public void OzelBirMetot() { }

Web sayfalarına gelen HTTP yöntemleri farklılık gösterir.

Genellikle bir web sayfasına girildiğinde GET, bir web sayfasına bilgi gönderildiğinde POST gibi yöntemler kullanılır.

Controller içerisinde yer alan metotların hangi yöntemde çalışacağını belirtmek için aşağıdaki nitelikler kullanılır.

HttpGet, HttpPost, HttpPut, HttpDelete, HttpHead, HttpOptions, HttpPatch

[HttpPost]
public ActionResult Index()
{
    return Content("Merhaba ben Yusuf Sezer");
}

Yukarıda yer alan metot web tarayıcıda çalıştırıldığında ekranda herhangi bir şey görünmeyecektir.

Çünkü metodun çalışması için HTTP yöntemi olarak POST kullanılmalıdır.

Bu yöntemler REST tabanlı web servis hazırlarken sıklıkla kullanılır.

Controller filters

Controller katmanında yer alan filters, selectors gibi metot ve sınıflara nitelik olarak eklenebilmektedir.

Filters niteliklerini selectors niteliklerinden ayıran en önemli özellik istek ve cevap işlemleri sırasında kullanabiliyor olmamızdır.

[OutputCache(Duration = 30)]
// [ResponseCache(Duration = 30)] // .NET Core
public ActionResult Index()
{
    return Content(DateTime.Now.ToString());
}

Filtre Controller çalıştırıldıktan sonra metot sonucunu 30 saniyeliğine önbelleğe alacaktır.

Benzer biçimde ActionFilterAttribute soyut sınıfı ile özel bir filtre oluşturularak kullanıcı doğrulama, session doğrulama gibi işlemler yapılabilir.

.NET Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.


Bunlarda ilgini çekebilir


LinkedIn grubuna buradan katılın.