Asp.Net Core MVC Custom Controller Oluşturma

İlk olarak Controller sınıflarının özelliklerinden bahsetmek gerekirse HTTP isteklerine cevap vermeyi sağlayan, kullanıcıya bir etkileşim ekranı -Action- sunmaya aracılık yapan sınıflardır.

Photo by Jan Huber on Unsplash

Controller sınıflarını tanımlamanın bir kaç yolu vardır:

1- ControllerBase Sınıfından katılmış bir class ile tanımlanabilir.

public class UserController : ControllerBase{}

2- Controller Son Eki(Suffix) Alacak Şekilde İsimlendirilmiş bir class tanımlamak


public class UserController {}

3- Tanımlanan bir class’ı [Controller] attribute ile işaretlemek.

[Controller]
public class User{}

Not: Burada aynı mantıkla bir controller’ın eğer controller özelliklerine erişilmesini istemiyorsak [NonController] attribute ile işaretleriz. Böylece o controller’a HTTP istekleri ile erişemeyiz.
Bu durumu geçici olarak kapatmak istediğimiz bir controller için kullanabiliriz.

4- Bu yazının asıl konusu bu yöntemi örnekleyebilmek. Aslında bu yöntem 2. bahsettiğimiz yönteme benzer. Diyelim sonu belirlediğimiz(suffix) bir şekilde biten classları da controller olarak atayabiliriz.

Bu yöntemi kullanabilmek için bir class oluşturuyoruz:

Sonu “Denetleyici” ile Biten Class’ları Controller Yapma

Oluşturduğumuz class ControllerFeatureProvider sınıfından türetiyoruz. Türettiğimiz sınıfın bizim için önemli metodu IsController(). Bu metodu override edip istediğimiz şekilde düzenliyoruz. Yukarıdaki kod ile birlikte hem önceki yöntemler gibi Controller’lar tanımlayabilir buna ek olarak da sonu “Denetleyici” ile biten classları Controller olarak tanımlayabiliyoruz.

Tabiki bu class tanımlamak bir işimize yaramıyacak bu class’ı bir yerden çağırmamız gerekecek ki burası Startup.cs:

services.AddMvc().ConfigureApplicationPartManager(op => { op.FeatureProviders.Add(new CustomControllerFeatureProvider()); });

Şimdi bu şekilde bir Controller tanımlayalım:

public class KullaniciDenetleyici
{
public string Get()
{
return “Test”;
}
}

Bu şekilde tanımladığımızda Controller çalışacaktır ancak …/KullaniciDenetleyici/Get şekilde erişebiliyoruz. Yani son ekin atılmış haline erişemeyiz. …/Kullanici/Get şekilde erişilmez.(Bunun için bir düzenleme yapmak gerekiyor. En kısa zamanda test edip eklemeye çalışacağım :) )

#SoftwareDeveloper

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store