Asp.Net Core MVC’nin gücünü ortaya çıkaran en temel bileşenlerden biri, Routing ve Controller mekanizmalarıdır. Bu bölümde, bir web uygulamasının nasıl çalıştığını ve kullanıcının tarayıcısından gelen bir isteğin nasıl doğru hedefe yönlendirildiğini keşfedeceğiz.
Routing, bir isteğin doğru kontrolöre ve aksiyon metoduna nasıl yönlendirileceğini belirleyen sistemdir. Asp.Net Core MVC'de routing, uygulama akışını organize eden kritik bir yapı taşını oluşturur. Kullanıcının yaptığı bir arama veya tıkladığı bir bağlantı, routing sayesinde ilgili işlemi gerçekleştiren doğru kod bloğuna ulaşır.
Bu yönlendirme işlemi bir kez tamamlandığında, devreye Controller girer. Controller, isteği işleyen, veriyi hazırlayan ve sonucu uygun bir şekilde kullanıcıya sunan yapı taşıdır. Controller’lar olmadan, kullanıcının taleplerini anlamak ve bunları işlemek mümkün değildir.
Bu bölümde, öncelikle routing'in nasıl çalıştığını, ardından bir kontrolörün nasıl oluşturulacağını ve bu kontrolörlerde kullanılan action metotları ile parametrelerin işlevlerini öğreneceğiz. Asp.Net Core MVC’nin esnek routing mekanizmasının nasıl özelleştirilebileceğini ve kontrolörlerin uygulamalarınızın "beyni" olarak nasıl çalıştığını kavrayacağız.
Gelin, bu kritik bileşenlerin detaylarına birlikte göz atalım!
Routing, Asp.Net Core MVC’de kullanıcıdan gelen HTTP isteklerini doğru kontrolör ve aksiyon metoduna yönlendiren bir mekanizmadır. Bir başka deyişle, bir web uygulamasında hangi isteğin hangi kod parçası tarafından işleneceğini belirleyen sistemdir. Routing sayesinde, kullanıcılar tarayıcı adres çubuğuna bir URL girdiğinde ya da bir bağlantıya tıkladığında, bu talep doğru bir şekilde ele alınır ve uygun bir yanıt döndürülür.
Asp.Net Core MVC’nin routing sistemi oldukça esnektir ve farklı ihtiyaçlara göre özelleştirilebilir. Bu sistem, hem geleneksel URL desenlerini hem de RESTful URL yapılarını destekler.
Routing, temel olarak şu iki bileşenden oluşur:
-
Route Templates (Yönlendirme Şablonları):
Route şablonları, URL’nin nasıl yapılandırılacağını belirler. Örneğin:/Home/Index /Products/Details/{id}
Bu şablonlar, hangi kontrolör ve aksiyon metodunun çağrılacağını tanımlar.
-
Middleware (Ara Yazılım):
Routing işlemi, uygulamanın başlatılması sırasında yapılandırılır ve gelen tüm HTTP isteklerini ele alır. Middleware, URL’yi çözümleyerek isteği ilgili kontrolöre yönlendirir.
Asp.Net Core MVC’de routing iki ana şekilde yapılandırılabilir:
-
Convention-Based Routing (Geleneksel Yönlendirme):
Geleneksel yönlendirme, genellikleStartup.cs
ya daProgram.cs
dosyasında yapılandırılır. Burada, uygulamanın genel rotaları tanımlanır. Örneğin:app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
Bu yapılandırma, varsayılan olarak
HomeController
veIndex
aksiyon metoduna yönlendirir. -
Attribute-Based Routing (Öznitelik Tabanlı Yönlendirme):
Bu yöntem, rotaların doğrudan kontrolör ve aksiyon metotlarına uygulanmasını sağlar. Örneğin:[Route("products/details/{id?}")] public IActionResult Details(int id) { // İşlem kodu }
Bu yöntem, daha esnek ve özelleştirilebilir bir yönlendirme sunar.
Aşağıda basit bir yönlendirme örneği verilmiştir:
URL: /Products/Details/5
Yönlendirme Şablonu: {controller=Home}/{action=Index}/{id?}
- Controller:
ProductsController
- Action:
Details
- Parameter:
id = 5
Kod örneği:
public class ProductsController : Controller
{
public IActionResult Details(int id)
{
// Veriyi işleme kodu
return View();
}
}
Routing, yalnızca web sayfaları için değil, aynı zamanda RESTful API’ler geliştirmek için de kritik bir öneme sahiptir. RESTful mimaride, URL’ler veri kaynaklarını temsil eder. Örneğin:
/api/products
→ Tüm ürünleri getirir./api/products/5
→ Belirli bir ürünü getirir.
Routing’in temel çalışma mantığını kavradığınızda, Asp.Net Core MVC’nin işleyişinde önemli bir yol kat etmiş olursunuz. Daha önce ele aldığımız MVC Mimarisi ve Bileşenleri başlığı, bu mekanizmanın nasıl yapılandığını anlamanızda faydalı olabilir. Ayrıca, Proje Yapısı ve Dosya Organizasyonu bölümünde kontrolörlerin yer aldığı dosya yapısını tekrar inceleyebilirsiniz.
Routing, bir web uygulamasında kullanıcı isteklerinin doğru bir şekilde işlenmesini sağlayan kritik bir yapı taşıdır. Asp.Net Core MVC’nin sunduğu güçlü ve esnek routing sistemi, geleneksel ve RESTful yönlendirme ihtiyaçlarını başarıyla karşılar. Bir sonraki bölümde, yönlendirme ile kontrolörlerin nasıl entegre çalıştığını ve kontrolörlerin yapısını detaylıca inceleyeceğiz!
Controller, Asp.Net Core MVC uygulamalarında kullanıcıdan gelen istekleri işleyen, iş mantığını yöneten ve uygun yanıtları kullanıcıya dönen bir bileşendir. Controller’lar, uygulamanızın "beyni" gibi çalışır. Kullanıcıdan bir talep geldiğinde, bu talep routing mekanizması tarafından uygun bir controller’a yönlendirilir. Controller, gelen talebi işler, gerekirse model katmanından veri alır ve sonucu bir view aracılığıyla kullanıcıya sunar.
Kısacası, controller’lar bir uygulamada şu işlevleri yerine getirir:
- HTTP isteklerini kabul eder ve işler.
- İlgili iş mantığını çalıştırır.
- Uygun bir response (yanıt) döner: HTML sayfası, JSON verisi veya başka bir formatta.
Asp.Net Core MVC'de bir controller, genellikle Controller taban sınıfından türeyen bir C# sınıfıdır. Bu sınıf, bir dizi action method içerir. Action methodlar, belirli bir işlemi gerçekleştiren fonksiyonlardır.
Örnek Bir Controller:
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
return Content("Hakkında Sayfası");
}
}
Yukarıdaki örnekte:
Index
metodu,View
döner ve bu, kullanıcıya bir HTML sayfası sunar.About
metodu, sadece düz metin içeren bir yanıt döner.
Asp.Net Core MVC'de yeni bir controller oluşturmak oldukça kolaydır. İzlenecek adımlar şu şekildedir:
-
Yeni Bir Controller Sınıfı Oluşturma
- Projede
/Controllers
klasörüne gidin. - Sağ tıklayın ve “Add > Controller” seçeneğini seçin veya yeni bir C# sınıfı oluşturun.
- Projede
-
Controller Taban Sınıfından Türetme
- Yeni oluşturduğunuz sınıfı
Controller
sınıfından türetin:public class ProductsController : Controller { public IActionResult Index() { return View(); } }
- Yeni oluşturduğunuz sınıfı
-
Action Metotlarını Tanımlama
- Kullanıcı isteklerini işlemek için action metotları ekleyin. Her bir action metodu, bir kullanıcı isteğine yanıt verecek şekilde tasarlanır.
-
Routing ile Entegrasyon
- Controller’ı bir routing şablonuyla ilişkilendirin. Örneğin:
/Products/Index
- Controller’ı bir routing şablonuyla ilişkilendirin. Örneğin:
-
Base Class (Taban Sınıf):
- Controller sınıfları genellikle
Microsoft.AspNetCore.Mvc.Controller
sınıfından türetilir.
- Controller sınıfları genellikle
-
Action Metotlar:
- HTTP isteklerini işleyen metotlardır. Bu metotlar
IActionResult
veya türevlerini döner.
- HTTP isteklerini işleyen metotlardır. Bu metotlar
-
Dependency Injection:
- Controller'larda servisleri veya veritabanı bağlantılarını enjekte edebilirsiniz:
private readonly IProductService _productService; public ProductsController(IProductService productService) { _productService = productService; }
- Controller'larda servisleri veya veritabanı bağlantılarını enjekte edebilirsiniz:
-
Filters (Filtreler):
- Controller veya action seviyesinde yetkilendirme, hata yönetimi gibi işlemleri uygulamak için kullanılır.
Kod Örneği:
public class BlogController : Controller
{
public IActionResult List()
{
return View();
}
public IActionResult Details(int id)
{
var blogPost = GetBlogPostById(id); // Örnek bir işlem
return View(blogPost);
}
}
Yukarıdaki controller, iki action metodu içerir:
- List: Tüm blog yazılarını listeleyen bir görünüm döner.
- Details: Belirli bir blog yazısının detaylarını gösterir.
Controller’lar, routing mekanizması tarafından çağrılır. Routing Nedir ve Nasıl Çalışır? başlığında bahsedildiği gibi, URL şablonları bir controller ve action metotla eşleşir. Örneğin:
- URL:
/Blog/Details/3
- Controller:
BlogController
- Action:
Details
- Parameter:
id = 3
Bu başlık, Asp.Net Core MVC’nin temel taşlarından biri olan controller’ların ne olduğunu ve nasıl oluşturulduğunu ele aldı. Daha fazla bilgi için Giriş ve Temel Kavramlar ve MVC Mimarisi ve Bileşenleri bölümlerine göz atabilirsiniz.
Controller’lar, Asp.Net Core MVC uygulamalarında kullanıcı isteklerini işleyen merkezi bileşenlerdir. Routing ile entegre çalışarak doğru iş mantığını işler ve kullanıcıya uygun yanıtı sunar. Bir sonraki bölümde, controller'larda kullanılan action metotları ve parametreler konusuna odaklanacağız.
Action metotları, Asp.Net Core MVC uygulamalarında bir kontrolör sınıfındaki belirli işlemleri temsil eden fonksiyonlardır. Kullanıcıdan gelen bir HTTP isteği, routing mekanizması sayesinde uygun bir action metoda yönlendirilir. Bu metot, isteği işler, gerekirse veriyle etkileşim kurar ve bir yanıt döner.
Action metotları, genellikle aşağıdaki görevleri yerine getirir:
- Kullanıcıdan gelen HTTP isteklerini işler (GET, POST, PUT, DELETE vb.).
- İlgili iş mantığını yürütür.
- Yanıt olarak bir View, JSON, veya başka bir formatta veri döner.
Bir action metodu, public bir fonksiyon olarak yazılır ve genellikle bir IActionResult
veya Task<IActionResult>
döner.
Basit Bir Action Metodu Örneği:
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Details(int id)
{
return Content($"Detay ID: {id}");
}
}
- Index: Varsayılan bir görünüm döner (
Index.cshtml
). - Details:
id
parametresini kullanarak basit bir metin döner.
Asp.Net Core MVC, farklı HTTP istek türlerini işlemek için özel özniteliklere sahiptir. En yaygın kullanılanlar şunlardır:
-
[HttpGet]
- Veri almak için kullanılır.
- Örnek:
[HttpGet] public IActionResult List() { return View(); }
-
[HttpPost]
- Veri göndermek için kullanılır.
- Örnek:
[HttpPost] public IActionResult Save(Product product) { // Veriyi kaydetme işlemi return RedirectToAction("List"); }
-
[HttpPut]
- Mevcut bir veriyi güncellemek için kullanılır.
-
[HttpDelete]
- Veri silme işlemleri için kullanılır.
Action metotlarına gelen isteklerle birlikte veri de gönderilebilir. Asp.Net Core MVC, bu verileri otomatik olarak action metotlarına bağlar. Bu sürece Model Binding adı verilir.
Örnek 1: URL Parametreleri
public IActionResult Details(int id)
{
return Content($"Ürün ID: {id}");
}
- URL:
/Products/Details/3
- Parametre:
id = 3
Örnek 2: Query String
public IActionResult Search(string query)
{
return Content($"Arama: {query}");
}
- URL:
/Products/Search?query=bilgisayar
- Parametre:
query = bilgisayar
Örnek 3: Form Verileri
[HttpPost]
public IActionResult Submit(string name, int age)
{
return Content($"Ad: {name}, Yaş: {age}");
}
Formdan gelen name
ve age
parametreleri metoda otomatik olarak bağlanır.
Action metotları çeşitli türlerde yanıt dönebilir:
- ViewResult: Bir görünüm döner (
return View();
). - JsonResult: JSON formatında veri döner (
return Json(data);
). - ContentResult: Düz metin döner (
return Content("Hello World");
). - RedirectResult: Başka bir URL’ye yönlendirir (
return Redirect("https://example.com");
).
Bir ürün yönetim sistemi için temel CRUD işlemlerini ele alalım:
Controller:
public class ProductsController : Controller
{
[HttpGet]
public IActionResult List()
{
// Tüm ürünleri listele
return View();
}
[HttpGet]
public IActionResult Details(int id)
{
// Belirli bir ürünü getir
return View();
}
[HttpPost]
public IActionResult Create(Product product)
{
// Yeni ürün oluştur
return RedirectToAction("List");
}
[HttpPost]
public IActionResult Delete(int id)
{
// Ürünü sil
return RedirectToAction("List");
}
}
- Action metotları ve parametreler, Controller Nedir ve Nasıl Oluşturulur? başlığıyla doğrudan ilişkilidir. Controller’ın nasıl çalıştığını anlamak için önceki bölüme göz atabilirsiniz.
- Routing mekanizması ile action metotlarının nasıl entegre çalıştığını öğrenmek için Routing Nedir ve Nasıl Çalışır? başlığı faydalı olacaktır.
Action metotları ve parametreler, Asp.Net Core MVC uygulamalarında kullanıcı isteklerini işleyen temel yapı taşlarıdır. Doğru bir şekilde tanımlandıklarında, kullanıcı isteklerine yanıt verme sürecini hızlı ve etkili hale getirir. Bir sonraki aşamada, bu metotların test edilmesi ve geliştirilmesi konularına odaklanabilirsiniz!
Bu bölümde, Asp.Net Core MVC’nin temel yapı taşlarından biri olan Routing ve Controller kavramlarını detaylı bir şekilde ele aldık. Kullanıcının bir web uygulamasında yaptığı talebin doğru bir şekilde işlenmesi için bu iki kavramın nasıl birlikte çalıştığını öğrendik.
-
Routing Nedir ve Nasıl Çalışır?
- Routing mekanizmasının, kullanıcı isteklerini uygun kontrolörlere yönlendiren bir sistem olduğunu gördük.
- Routing türlerini (Convention-Based ve Attribute-Based) ve bu türlerin nasıl kullanıldığını inceledik.
Daha fazla detay için Routing Nedir ve Nasıl Çalışır? başlığına göz atabilirsiniz.
-
Controller Nedir ve Nasıl Oluşturulur?
- Controller’ların bir uygulamada gelen talepleri işlemek ve yanıt döndürmek için kullanılan sınıflar olduğunu öğrendik.
- Controller’ların yapısını ve işlevlerini, action metotlarla nasıl çalıştığını ele aldık.
Detaylı bilgi için Controller Nedir ve Nasıl Oluşturulur? başlığına dönebilirsiniz.
-
Action Metotları ve Parametreler
- Action metotlarının, bir kontrolörün çekirdeğini oluşturduğunu ve kullanıcı isteklerini işlediğini gördük.
- Bu metotların nasıl parametreler alabildiğini ve farklı HTTP istek türlerini nasıl işleyebileceğini inceledik.
Daha fazla bilgi için Action Metotları ve Parametreler başlığını inceleyebilirsiniz.
Bu noktada, bir web uygulamasının temel işleyişini oluşturan backend bileşenlerini öğrendik. Şimdi ise kullanıcıya sunulan arayüzlerin nasıl oluşturulduğunu ve görselleştirildiğini öğrenme zamanı geldi. 3. View ve Razor başlıklı bölümde şunları ele alacağız:
- View’ların Yapısı ve İşlevi: Kullanıcıya sunulan arayüzlerin nasıl oluşturulduğunu anlayacağız.
- Razor Syntax: Dinamik HTML içerikleri üretmek için kullanılan Razor dilini keşfedeceğiz.
- Layout ve Partial View’lar: Tekrarlayan arayüz bileşenlerinin nasıl yönetileceğini göreceğiz.
Routing ve Controller mekanizmalarını kavradıysanız, View ve Razor konuları ile Asp.Net Core MVC’nin gücünü bir adım öteye taşıyabilirsiniz. Bir sonraki bölümde görüşmek üzere!