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.
.NET Core Nasıl çalışır
Oluşturulan dosyalar incelendiğinde global.asax, Web.Config dosyaların olmadığı .NET Core 5 öncesi Program.cs ile Startup.cs .NET 5 sonrası sadece Program.cs oluşacaktır.
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 5 sonrası için karşılığı aşağıdaki gibidir.
Console.WriteLine("Merhaba ASP.NET Core");
//var builder = WebApplication.CreateBuilder(args);
//var app = builder.Build();
//app.MapGet("/", () => "Hello World!");
//app.Run();
.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.
.NET 5 sonrası
.NET 5 sonrası için WebApplication.CreateBuilder metodu programa gönderilen parametrelere göre WebApplicationBuilder sınıfını döndürür.
WebApplicationBuilder sınıfında yer alan Services özelliği IServiceCollection arayüzü servislere, Environment özelliği IWebHostEnvironment arayüzü ortam değişkenlerine, Logging … ulaşarak Build metodu ile ASP.NET uygulamasını yapılandırarak WebApplication sınıfı döndürür/sağlar.
WebApplication sınıfı IHost, IApplicationBuilder, IEndpointRouteBuilder arayüzleri ve arayüzlere C# Extensions özelliği ile eklenen metotlarla servis ayarları yapmayı sağlar.
var builder = WebApplication.CreateBuilder(args);
// Kullanılacak servisler eklenir.
// builder.Services - IServiceCollection erişim
builder.Services.AddMvc(); // MVC servisi eklenir.
var app = builder.Build();
// Servis ayarları yapılır.
// app.Environment - IHostingEnvironment
// app.UseMvc(); // MVC özelliği aktif edilir.
// app.UseStaticFiles();
app.MapGet("/", () => "Hello World!");
app.Run();
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.