ASP.NET CORE

ASP.Net Core tıpkı klasik ASP.Net gibi microsft tarafından geliştirilmiş bir platformdur. 2002’den bu yana bir ASP.Net birçok yeni özelliği ile birlikte sürekli geliştirildi.

Yazıya başlamadan hemen önce belirteyim, arzu ederseniz bu yazıya ilişkin olarak aşağıdaki videoyu da izleyebilirsiniz.

ASP.Net Core, http request işlemleri, uygulama geliştirme, bir takım destekleyici özelliklere sahip  bir platformdur. Bunu resmedersek şöyle diyebiliriz aslında:

ASP.NET CORE FRAMEWORKS

Application Framework:

ASP.NET Core’u kullanmaya başladığınızda çok farklı uygulama yapılarının olduğunu göreceksiniz. Bunlar biraz kafa karıştırıcı ancak öğrendikçe bu uygulama yapılarının tamamlayıcı ve farklı problemleri çözmek, bazı özellikler kazandırmak, problemleri farklı yollar ile çözmek için kullanılan yapılar olduğunu göreceksiniz. Bu uygulama yapıları arasındaki ilişkiyi anlamak Microsoft’un değişen design pattern yani tasarım modellerini anlamak anlamına gelir.

MVC Framework:

MVC Framework ASP.NET Core’dan önce tanıtılan bir yapıdır. ASP.NET WEB sayfaları modellemesine dayanan bir geliştirim yöntemi idi. Ancak ASP.NET teknolojisi biraz hantal yapıya sahip bir teknoloji olması sebebi ile MVC Framework teknolojisi gündeme geldi. MVC Framework HTML ve http sayfalarını benimseyen bir geliştirme modeli sundu. MVC açılımı Model-View-Controller kelimelerinin baş harflerinden oluşur. MVC yapısı işlevsel alanların birbirinden bağımsız olmasına olanak sağlar, klasik ASP.NET web formların açmış olduğu belirsiz mimari yapısının önlenmesine olanak tanır.

MVC’nin ilk sürümleri klasik ASP.NET temelleri üzerine inşa edilmiştir. .NET Core’a geçiş ile birlikte klasik ASP.NET artık günümüzde ASP.NET Core MVC olarak adlandırılmakta. Böylelikle daha clean code dediğimiz yapılar, daha esnek uygulamalar, genişletilebilir uygulamalar ve çapraz platform dediğimiz platformlar arası web uygulamaları geliştirebilmek daha düzenli bir hale geldi diyebiliriz.

MVC Framework, ASP.NET Core’un önemli bir parçası olmaya devam ediyor. Ancak yaygın olarak özellikle tek sayfalık SPA (Single Page Application) yapılarında daha tercih edilebilir durumda. Bir SPA uygulamasında tarayıcı tek bir istek yapar ve karşılığında Angular, React gibi bir JavaScript istemcisinde yazılmış bir HTML belgesi alır.

Design Pattern ile alakalı söylemek istediğim birkaç bir şey var, Design pattern kullanmak yani belli bir tasarım modeli kullanmak sizi rahatlatır. Ancak her noktada belli bir design pattern doğrultusunda gidilemeyebilir. Dolayısı ile kodlamada bazen özgür davranmanız gerekecektir. Yani şöyle diyelim kullanmış olduğunuz design pattern ile kodlamanızı yapmanız sizi yönetilebilir, geliştirilebilir bir uygulama çıkarmanıza yardım eder. Ancak körü körüne değil, gerektiğinde de özgür davranabilmelisiniz. 🙂

Razor Pages:

MVC Framework’un en büyük dezavantajı uygulama geliştirmeye başlamadan önce çok fazla hazırlık yapılması gerektiğidir. Yapısal sorunlarına rağmen klasik ASP.NET web formları ile birkaç saat içinde uygulamalar oluşturulabilmektedir. Razor Pages, WEB formları gibidir ancak MVC çerçevesinde geliştirme yapabilmesi açısından ilgili özellikler uygulanır. Kod ve içerik bağımsız sayfalar oluşturmak için aynı ortamda kullanılabilir.

Blazor:

Javascript başlı başına kendine özgü bir programlama dilidir. Tabi biraz da c# geliştiricilerini yeniden bir dil öğrenmeye iten bir yükselişe de sahip. C# kadar akıcı ve etkileyici bir dil aslında, başlarda sevmesem de sevmeye başlıyorum gibi. Ama zaman alıcı, çünkü C# temellerinden daha farklı bir yapıya sahip. Yetkinlik kazanmakta uzun sürecektir. Blazor işte bu noktada C#’ın istemci tarafındaki uygulamaları yazmak için kullanılmasına izin vererek buradaki boşluğu dolduruyor. Blazor’un iki versiyonu mevcut.

Blazor Server ve Blazor WebAssembly

Blazor Server, ASP.NET Core tarafından desteklenen ve kararlı bir yapıya sahiptir ve ASP.NET Core sunucusuna kalıcı http bağlantısı sağlayarak, uygulamada C# kodunu çalıştırmaktadır.

Blazor WebAssembly ise bir adım daha ileri giderek tarayıcı üzerinde C# kodunu çalıştıran bir yapıya sahiptir.

Blazor biraz daha yeni bir konu bakalım zamanla bize neler getirecek, göreceğiz.

Utility Frameworks:

Application Frameworks ve Utility Frameworks her ikisi de ASP.NET Core ile doğrudan ilişkilidir ancak doğrudan bir HTML içerik veya veri oluşturmak için kullanılmazlar.

Entity Framework Core, Microsoft’un object-relational mapping (ORM) dediğimiz ilişkisel bir veritabanında verileri temsil eden bir çerçevesidir. Entity Framework Core herhangi bir .NET Core uygulamasında kullanılabilir ve yaygın olarak içindeki ASP.NET Core uygulamalarındaki veritabanlarına erişmek ve veritabanı işlemleri yapmak için kullanılır.

ASP.NET Core Identity, Microsoft’un kimlik doğrulama ve yetkilendirme framework’üdür. ASP.NET Core uygulamalarında kullanıcı kimlik bilgilerini doğrulama, uygulamada erişilebilecek alanları tanımlama, kısıtlama gibi işlemler için kullanılır.

ASP.NET Core Platform:

ASP.NET Core platformu, http isteklerini almak, işlemek ve yanıtlar oluşturmak için gereken özellikleri içermektedir. Genel olarak yapısında istekleri işlemek için ara katman (middleware) komponentleri, uygulamanın temel özellikleri, URL yönlendirme (URL Routing), Razor View, entegre bir http sunucusuna sahiptir.

EndPoints:

ASP.NET Core uygulamalarında gelen istekler endpointler tarafından işlenir. Bu işlemler Action olarak adlandırılır. Action bir Controllerda tanımlanır ve her bir controller aslında birer class’tır. Bu classlar Microsoft AspNetCore Mvc Controller classından türetilirler.

Controller tarafından tanımlanmış olan bütün public metotlar birer aksiyondur. Yani bir http isteğini gerçekleştirebilmek için controller içinde actionlar kullanılır.

ASP.NET Core projelerinde genel kural, controller classlarını Controllers ismindeki bir klasörde tutmaktır.

ASP.NET Core projesi oluşturulduğunda proje şablonu tarafından bazı otomatik dokümanlar gelecektir. Controller Klasörü altında yer alan HomeController.cs dosyası gibi. Proje template’i vasıtası ile oluşturulan HomeController.cs içeriği aşağıdaki gibidir:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using FirstProject.Models;

namespace FirstProject.Controllers 
{
  public class HomeController : Controller 
  {
    private readonly ILogger _logger;
     public HomeController(ILogger logger) 
     {
       _logger = logger;
     }
    public IActionResult Index() 
    {
     return View();
    }
    public IActionResult Privacy() {
     return View();
    }
   [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None,
NoStore = true)]
   public IActionResult Error() 
   {
    return View(new ErrorViewModel { RequestId = Activity.Current?.Id
?? HttpContext.TraceIdentifier });
   }
 }
}

Burada kendimize göre düzenleme yapabiliriz. Örneğin Merhaba Dünya ile başlamak gibi 🙂

using Microsoft.AspNetCore.Mvc;

namespace FirstProject.Controllers 
{
 public class HomeController : Controller 
 {
  public string Index() 
  {
    return "Merhaba Dünya";
  }
 }
}

Burada kullanılmayan usingleri kaldırdım, aynı şekilde kullanılmayan metotları kaldırdım. Result tipini eğiştirdim, buna göre implemente işlemi yaptım. Şimdi bu üstteki kısa kod bloğuna baktığımızda, HomeController içinde sadece tek bir Action tanımlı ismi de Index. Burada Merhaba Dünya yazısını dönen bir metot mevcut. Bu kod çalıştırıldığında, tarayıcı tarafından ASP.NET Core sunucusuna bir istek gönderilir. Burada aksiyon, Home Controller sınıfı içinde yer alan Index aksiyonu ile gerçekleştirilir. Ve geriye tarayıcı da Merhaba Dünya yazan bir string mesaj döndürülür.

Routes:

ASP.NET Core routing ile bir http isteğini işleyecek endpoint seçilir. Route bir isteğin nasıl ele alınacağına karar vermek için kullanılır. Projenin oluşturulması aşamasında var sayılan olarak kurallar oluşturmak amacı ile kullanılır.

  • /
  • /Home
  • /Home/Index gibi.

HTML Rendering:

Bir üst başlıkta ele aldığımızda elde ettiğimiz Merhaba Dünyası aslında bir HTML değil, bir string veri dizesidir. Uygulamalarda ASP.NET Core tarafından üretilen sonucu bir HTML sayfasında görebilmek için tarayıcıya yanıtı göndermemizi sağlayan View’lara ihtiyacımız var.

View Oluşturma:

Aşağıdaki kodları içeren bir HomeController.cs dokümanım var.

using Microsoft.AspNetCore.Mvc;

namespace IlkProje.Controllers 
{
 public class HomeController : Controller 
 {
  public ViewResult Index() 
  {
   return View("İlkView");
  }
 }
}

Burada yer alan action üzerinden bir ViewResult döndürdüğümde ASP.NET Core’a aslında bir görünüm oluşturma talimatı veriyorum. View metodunu çağırarak ViewResult vasıtası ile İlkView adındaki kullanmak istediğim View’i çağırıyorum. Ancak İlkView oluşturulmadığı için hata alırım. Bu hata da ASP.NET Core’un ilgili action için tanımlanmış View’i bulamadığını öğreniriz.

View’lar alt klasörler halinde düzenlenir ve Views klasörü altında saklanır. Örneğin HomeController ile alakalı View’lar şu şekilde saklanır. Views klasörü altında Home klasörü oluşturulur ve Home klasörünün altına eklenirler.

Tek bir controllera ait olmayan , ortak kullanımlı View’lar ise Views klasörü altında Shared klasörü oluşturulur ve bu klasör altında saklanırlar. Layout gibi örneğin.

Şimdi solution Explorer alanında Views altında Home laösrü üzerinde sağ yılayıp Add seçip sonrasında New Item seçelim. Bu işlemi yaptıktan sonra Visual Studio bize birkaç tane template seçme seçeneği sunacak. Burada projemize eklemen için seçeceğimiz Razır Biew olacak, bu da ASP.NET Core > Web > ASP.Net bölümünde yer alıyor.

Bunu seçiyoruz ve oluşturulacak olan cshtml dokümanın adını IlkView.cshtml verdim. Burada kodlarımı aşağıdaki şekilde düzenliyorum:

@{
Layout = null;
}

 
  
   
   Index
  
 
  
Merhaba (view üzerinden görüntülenir)

Son oluşturduğumuz IlkView.cshtml dokümanı bir HTMl belgesidir. Ancak bu belge üzerinde yer alan aşağıdaki kodla başlayan kısım Razor tarafından yorumlanan kısımdır.

...
@{
Layout = null;
}
...

Üstteki kısımda anlatılmak istenen herhangi bir bir layout kullanılmayacağıdır. İlk örneğimde Index metodu bana bir string döndü, bu son örneğimde ise bana bir ViewResult dönmektedir. Burada Razor; görüntüleme ve HTML bir sayfa yanıtı oluşturmak için kullanılmaktadır. Buradaki önemli husus şu, herhangi bir contoller için işleşen bir View oluşturma durumunda mutlaka ilgili View o controller adını taşıyan bir klasörde ve o action adını içeren bir cshtml dosyasında tanımlanmalıdır. Örneğimde HomeController içinde IlkView adında bir action oluşturduğum için benim IlkView.cshtml adlı View dokümanım da View > Home klasörleri altında IlkView.cshtml adı ile yer almaktadır.

Herhangi bir action işlemi sonucunda string, ViewResult dönebildiğim gibi başka sonuçlarda dönebiliriz. Örnek olarak bir yeniden başka bir sayfaya yönlendirme eylemi için RedirectResult geriye döndürülebilir. Kullanıcıya oturum açtırmak için HttpUnauthorizedResult dönebiliriz.

Dinamik Çıktılar Elde Etmek

Bir web uygulamasının tüm amacı dinamik bir çıktı oluşturmak ve bunu görüntülemektir. Action metodunun görevi veriyi inşa etme, veri değerlerine dayalı olarak HTML içeriği oluşturulması için iletimi sağlamaktır. View’a sağlanan veriler ViewModel olarak bilinir.

Viewmodel kullanıma ilişkin basit bir örnekle devam edelim;

using Microsoft.AspNetCore.Mvc;
using System;

namespace IlkProje.Controllers 
{
 public class HomeController : Controller 
 {
  public ViewResult Index() 
  {
   int saat = DateTime.Now.Hour;
   string viewModel = saat < 12 ? “Günaydın” : “İyi Günler”;
   Return View(“IlkView”, viewModel);
  }
 }
}

Bu örnekteki view model bir stringtir. View metodunun ikinci overdloadında kullanılır ve anlık olarak saat verisinin durumuna göre eğer saat 12’den küçük ise string olarak Günaydın, değil ise İyi Günler ifadesinin string verisinin IlkView ile döndürülmesini sağlar. Peki bunu HTML tarafında nasıl düzenleriz görelim:

@model string
@{
Layout = null;
}


  
   
   
   Index
  
  
   
@Model Merhaba (View’den gelen)

Üstteki kod bloğunda view modelimizin tipini @model ifade ile başlayan kısımda belirtiyoruz. View modele ait değer ise HTML kısmında @Model ile belirtilir. Burada @Model deyip bir isim veririz. Arka planda aslında yapılan View işlendiğinde, metot tarafından sağlanan view model verisi HTML yanıtına eklenmektedir.

Bu yazımda ASP.NET Core nedir, temelleri nelerdir elimden geldiğince değinmeye çalıştım. İşin özü ASP.NET Core bir http isteğini alır ve yönlendirme sistemini kullanarak ilgili eşleşen bir URL’e yönlendirir. Burada sonlanan nokta bir kontroller içinde tanımlanmış olan bir actiona bağlı olan ilgili View’dir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir