ASP.NET Core Nedir? Nasıl Çalışır?

Microsoft tarafından geliştirilen ASP.NET dilinin devamı olan ASP.NET Core nedir, nasıl çalışır, startup ve middleware yapısı ile ilgili bilgiler yer alıyor.

ASP.NET Core nedir?

ASP.NET Core, .NET platformunun platform bağımsız hali .NET Core platformunda web tabanlı uygulamalar geliştirmeye imkan veren bir pakettir.

ASP.NET hakkında detaylı bilgi için ASP.NET Nedir? yazımı okuyabilirsiniz.

.NET platformunun .NET Core platformuna taşınmasıyla birlikte .NET yapısı neredeyse tamamen modüler bir yapıya çevrilmiş ve .NET içerisinde yer alan Entity Framework, ASP.NET gibi özellikler dil çekirdeğinden ayrılarak ayrı bir paket olarak kullanılmaya başlanmıştır.

System.Web alanında yer alan ve ASP.NET uygulamaları geliştirmeye imkan veren sınıflarda dil çekirdeğinden ayrılarak Microsoft.AspNetCore.App Nuget paketine taşınmıştır.

Nuget hakkında detaylı bilgi için NuGet Nedir? yazımı okuyabilirsiniz.

Kullanımı

ASP.NET Core ile uygulama geliştirmek için öncelikle .NET Core SDK kurulumunun yapılması gerekir.

Kurulum ve kullanım hakkında detaylı bilgi için .NET Core Kurulumu ve Kullanımı yazıma bakabilirsiniz.

.NET Core CLI aracıyla ASP.NET Core projesi oluşturmak için aşağıdaki komutu işletim sistemi komut yorumlayıcısına yazmak yeterli olacaktır.

dotnet new web

Komut önceden hazırlanmış ASP.NET Core yapısını oluşturur.

Nasıl çalışır

Oluşturulan dosyalar incelendiğinde global.asax, Web.Config dosyaların olmadığı ve Program.cs ile Startup.cs dosyaları görünecektir.

NOT: ASP.NET Core uygulaması bir console uygulaması gibi oluşturulur.

Main metodu aşağıdaki gibi yapılıp çalıştırıldığında konsol ekranına Merhaba ASP.NET Core yazacaktır.

public class Program
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine("Merhaba ASP.NET Core");
        //CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

.NET Core uygulamalarını çalıştırmak için aşağıdaki komut kullanılır.

dotnet run

CreateWebHostBuilder metodu WebHost sınıfı CreateDefaultBuilder metodu IWebHostBuilder arayüzünü uygulayan bir sınıf oluşturulur.

IWebHostBuilder arayüzüne Extensions özelliği ile eklenen UseStartup metoduna uygulama başlangıcında kullanılacak sınıf yazılır.

Startup sınıf yapısı aşağıdaki gibidir.

public class Startup {

    // Kullanılacak servisler eklenir.
    public void ConfigureServices(IServiceCollection services) { }

    // Servis ayarları yapılır.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
        if (env.IsDevelopment()) {
            app.UseDeveloperExceptionPage();
        }

        app.Run(async (context) => {
            await context.Response.WriteAsync("Hello World!");
        });
    }
}

İlk olarak başlangıç sınıfının bir örneğini oluştur ve kurucu metodu çalıştırır.

NOT: Başlangıç sınıfı Startup adından farklı bir ada sahip olabilir.

Kurucu çalıştırıldıktan sonra ConfigureServices metodu ile ASP.NET Core uygulamalarında kullanılacak servisler projeye dahil edilir.

Örneğin; ASP.NET Core MVC özelliğini/hizmetini projede kullanmak için AddMvc metodu kullanılır.

services.AddMvc();

Kullanılacak olan servisler projeye eklendikten sonra Configure metodu ile servis ayarları yapılır.

Örneğin yukarıda eklediğimiz MVC özelliğini kullanmak için Configure metoduna aşağıdaki komutu eklemek yeterli olacaktır.

app.UseMvc();

Bu alanda sadece servisler değil çeşitli proje ayarları da yapılabilir.

app.UseStaticFiles();

Yukarıdaki komut wwwroot klasöründe yer alan dosyalara doğrudan erişim imkanı vermektedir.

Middleware

ASP.NET Core proje yapısı incelendiğinde tüm işlemlerin belirli bir sırayla yapıldığı görülür.

Sıralamanın değiştirilmesi uygulama sonucunu etkileyecektir.

Örneğin aşağıda komutlar Configure metodunun en başına eklenip çalıştırıldığında ekrana Merhaba ASP.NET Core yazacaktır.

app.Run(async (context) => {
    await context.Response.WriteAsync("Merhaba ASP.NET Core");
});

Benzer şekilde Use, Run, Map ve MapWhen metotlarının sıralaması değiştirildiğinde sonuç değişecektir.

public class Startup {
    public void ConfigureServices(IServiceCollection services) {}

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {

        app.Map("/iletisim", IletisimHandler);

        app.Run(async (context) => {
            await context.Response.WriteAsync("Hello World!");
        });
    }

    private static void IletisimHandler(IApplicationBuilder app) {
        app.Run(async (context) => {
            await context.Response.WriteAsync("Merhaba burası iletişim sayfası!");
        });
    }
}

Yukarıda yer alan örnekte Map metodu ile /iletisim alanına gelen istekleri Middleware ile IletisimHandler metoduna yönlendirmiş olduk.

Middleware yapısında ilk olarak gelen istekleri karşılayacak metotlar bir diziye aktarılır.

Bir web isteği geldiğinde isteğe karşılık gelen metot çalıştırılır.

Bir istek birden fazla metot tarafından karşılanıyorsa ilk metot çalıştırıldıktan sonra next ile sonraki metodun çalıştırılması sağlanır.

Middleware yapısı ayrıca boru hattı yani pipeline olarak adlandırılmaktadır.

NOT: Middleware Node.js içerisindeki web isteklerini yöneten Express.js modülünden alınmıştır.

Sonuç

Middleware yapısın iyi bir şekilde kavramak önemlidir.

Çünkü ASP.NET Core içerisindeki tüm servisler, ayarlar bu yapıyı kullanarak işlem yapar.

Örneğin; ConfigureServices metodu ile eklediğimiz MVC özelliği daha sonra IApplicationBuilder arayüzüne Extensions özelliği ile eklenen UseMvc middleware metodu ile kullanılır.

.NET Derslerine buradan ulaşabilirsiniz.

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!