ASP.NET Core’da Program.cs Kodlarının Detaylı Açıklaması

ASP.NET Core'da Program.cs Kodlarının Detaylı Açıklaması
ASP.NET Core'da Program.cs Kodlarının Detaylı Açıklaması
Yazılım Kodu Kanalına Abone Olun

Herkese merhaba. Bu yazıda ASP.NET Core’da Program.cs kodlarının detaylı açıklaması ile ilgili bilgi vermeye çalışacağım.

Öncelikle belirtmek isterim ki Program.cs ASP.NET Core 6 ve üzeri sürümlerde vardır.

Program.cs classı, ASP.NET Core uygulamasının giriş noktasını oluşturur. Uygulama başlatma kodunu içerir.

Bu noktada Program.cs class’ında yapılacak işlemler şunlardır:

  1. Uygulamanın ihtiyaç duyduğu servisleri yapılandırmak ve kaydetmek.
  2. Middleware bileşenlerini kaydetmek ve uygulamanın istek işleme hattını yapılandırmak.

Bir ASP.NET Core uygulaması oluşturulduğunda, genellikle Program.cs dosyası otomatik olarak oluşturulur ve bu class içeriği aşağıdakilere benzer şekilde projeden projeye göre değişmektedir.

ASP.NET Core Web App

var builder = WebApplication.CreateBuilder(args); 
 
builder.Services.AddRazorPages();
 
var app = builder.Build();
 
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}
 
app.UseHttpsRedirection();

app.UseStaticFiles();
 
app.UseRouting();
 
app.UseAuthorization();
 
app.MapRazorPages();
 
app.Run();

ASP.NET Core Web App (Model View Controller)

var builder = WebApplication.CreateBuilder(args);
 
builder.Services.AddControllersWithViews();
 
var app = builder.Build();
 
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}
 
app.UseHttpsRedirection();

app.UseStaticFiles();
 
app.UseRouting();
 
app.UseAuthorization();
 
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
 
app.Run();

ASP.NET Core Web API

var builder = WebApplication.CreateBuilder(args);
 
builder.Services.AddControllers();
 
builder.Services.AddEndpointsApiExplorer();

builder.Services.AddSwaggerGen();
 
var app = builder.Build();
 
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
 
app.UseHttpsRedirection();
 
app.UseAuthorization();
 
app.MapControllers();
 
app.Run();

var builder = WebApplication.CreateBuilder(args);

Bu kod satırı, ASP.NET Core 6.0 ve sonraki sürümlerde kullanılan bir yapıyı temsil ediyor. ASP.NET Core, web uygulamaları geliştirmek için kullanılan açık kaynaklı bir framework’tür. Program.cs’de olan bu satır, web uygulamasının temel yapılandırmasını oluşturmak için kullanılan bir başlangıç noktasını gösterir.

Kısacası, WebApplication.CreateBuilder(args) kodu, ASP.NET Core uygulamasının yapılandırma ve hizmetleri oluşturmak için gerekli olan bir WebApplicationBuilder örneğini oluşturur. args parametresi, uygulamanın komut satırı argümanlarını temsil eder.

Bu yapı, daha sonra uygulamanın yapılandırmasını ve hizmetlerini belirlemek üzere kullanılabilecek bir WebApplicationBuilder nesnesini döndürür. Bu nesne, ConfigureServices ve Configure yöntemlerini çağırarak uygulamanın hizmetlerini yapılandırmanıza ve uygulama işlevselliğini tanımlamanıza olanak tanır.

builder.Services.AddRazorPages();

builder.Services.AddRazorPages() ifadesi, ASP.NET Core uygulamasında Razor Pages özelliğini etkinleştirmek için kullanılan bir yapıdır. Razor Pages, ASP.NET Core web uygulamaları için kullanılan bir Model-View-Controller (MVC) yaklaşımıdır ve özellikle basit ve tek sayfalık uygulamaları hızlı bir şekilde oluşturmak için tasarlanmıştır.

Bu ifade, Services koleksiyonuna bir hizmet ekler. Services koleksiyonu, uygulamanızın genelinde kullanılabilir hizmetleri ve bileşenleri içerir. AddRazorPages() metodu, Razor Pages özelliğini uygulamanıza ekler ve Razor Pages’in işlevselliğini kullanmanıza olanak tanır.

if (!app.Environment.IsDevelopment()) {

}

Bu kod satırı, uygulamanın çalıştığı çevrenin geliştirme ortamı olup olmadığını kontrol eder. Eğer uygulama geliştirme ortamında çalışıyorsa, belirli hata ayıklama ve hata işleme davranışlarını etkinleştirmek üzere tasarlanmış olan kod bloğunu içine alacaktır.

app.Environment.IsDevelopment() ifadesi, ASP.NET Core uygulamasının çalıştığı ortamın “geliştirme” ortamı olup olmadığını belirlemek için kullanılır. Geliştirme ortamında çalışmak, uygulamanın daha fazla hata ayrıntısı sağlamasına, hata sayfalarını göstermesine ve hata durumlarını daha ayrıntılı bir şekilde işlemesine olanak tanır. Ancak, canlı (prodüksiyon) ortamlarında bu tür ayrıntıları genellikle kullanıcıya görüntülemek istemezsiniz çünkü güvenlik riski oluşturabilir veya kullanıcı deneyimini olumsuz etkileyebilir.

Bu nedenle if (!app.Environment.IsDevelopment()) ifadesi, uygulamanın canlı (prodüksiyon) ortamda çalıştığı durumu temsil eder. Bu durumda, daha sınırlı ve kullanıcı dostu hata işleme davranışlarını etkinleştirmek amacıyla kullanılır.

app.UseExceptionHandler(“/Home/Error”);

app.UseExceptionHandler("/Home/Error"); ifadesi, ASP.NET Core uygulamasında bir istisna (exception) durumu meydana geldiğinde bu istisna durumunu ele almak ve kullanıcıya uygun bir hata sayfası göstermek için kullanılır.

Bu ifade, uygulamanın istisna işleme (exception handling) mekanizmasını yapılandırmak amacıyla kullanılır. Özellikle canlı (prodüksiyon) ortamda, kullanıcıya ayrıntılı istisna bilgilerini göstermek güvenlik riski oluşturabilir ve kullanıcı deneyimini olumsuz etkileyebilir. Bu nedenle, bu tür durumlar için daha kontrol edilebilir ve kullanıcı dostu bir hata sayfası gösterilmesi tercih edilir.

Bu kod, uygulama boyunca herhangi bir istisna durumu meydana geldiğinde, istisna işleyiciyi devreye sokar ve /Home/Error URL’sine yönlendirir. Bu sayfa, genellikle uygulamanın hata sayfasını temsil eder ve kullanıcılara hatayı açıklar.

/Home/Error yolunu isteğe göre değiştirebilirsiniz; bu, hata sayfasının nerede bulunacağını ve kullanılacak sayfanın ne olduğunu belirtir. Bu yapı, uygulama kullanıcılarına daha iyi bir hata deneyimi sunmak için önemli bir bileşendir.

app.UseHsts();

app.UseHsts(); ifadesi, ASP.NET Core uygulamasında HTTP Strict Transport Security (HSTS) özelliğini etkinleştirmek için kullanılır. HSTS, web tarayıcılarına ve diğer istemcilere, belirli bir süre boyunca (genellikle birkaç ay) sunucuyla iletişim kurarken sadece güvenli (HTTPS) bağlantıları kullanmalarını emreden bir güvenlik mekanizmasıdır.

HSTS, kullanıcıların tarayıcılarında güvensiz (HTTP) bağlantılar yerine otomatik olarak güvenli (HTTPS) bağlantıları kullanmalarını sağlayarak, tarayıcı üzerinden gerçekleştirilen potansiyel saldırıları ve veri sızıntılarını azaltmaya yardımcı olur.

Bu kod, uygulamanın güvenliği artırmak amacıyla HSTS özelliğini etkinleştirir. Ancak HSTS kullanmadan önce, sunucunuzun SSL/TLS sertifikasıyla güvenli HTTPS bağlantısını doğru şekilde ayarladığınızdan emin olmalısınız. Ayrıca HSTS’nin uzun vadeli taahhüdü dikkate alınmalıdır, çünkü HSTS ayarladığınız süre boyunca güvensiz bağlantıları reddedecektir. Bu nedenle HSTS’yi doğru bir şekilde yapılandırmak ve uygulamanızın gereksinimlerine uygun bir süre belirlemek önemlidir.

app.UseHttpsRedirection();

app.UseHttpsRedirection(); ifadesi, ASP.NET Core uygulamasında HTTP isteklerini otomatik olarak HTTPS isteklerine yönlendirmek için kullanılır. Bu yönlendirme, güvenli (HTTPS) bağlantılarının kullanımını teşvik etmek ve kullanıcıların verilerini güvende tutmak amacıyla kullanılır.

HTTP bağlantıları güvensiz olabilir ve kullanıcı verileri ağ üzerinde açık bir şekilde iletilir. HTTPS ise verilerin şifrelenmiş bir şekilde iletilmesini sağlar. app.UseHttpsRedirection(); ifadesi, tarayıcılar tarafından yapılan HTTP isteklerini otomatik olarak HTTPS isteklerine yönlendirir.

Bu ifade, uygulamanın HTTP isteklerini otomatik olarak HTTPS isteklerine yönlendirecektir. Bu, kullanıcıların bilgilerini daha güvenli bir şekilde iletebilmeleri ve güvenli bir bağlantı üzerinden veri alışverişi yapabilmeleri için önemlidir. Bu kod, uygulamanın güvenliğini artırmaya yardımcı olur ve kullanıcıların bilgilerini koruma konusunda önemli bir adım sağlar.

app.UseStaticFiles();

app.UseStaticFiles(); ifadesi, ASP.NET Core uygulamasında statik dosyaların (örneğin HTML, CSS, resim dosyaları) istemcilere (tarayıcılara) sunulmasını sağlamak için kullanılır. Statik dosyalar, uygulamanın dinamik içeriğini oluşturmak için kullanılan kodun dışında kalan ve genellikle sabit kalan dosyalardır.

Örnek statik dosyalar şunlar olabilir:

  • HTML dosyaları
  • CSS dosyaları
  • JavaScript dosyaları
  • Resim dosyaları
  • Video ve ses dosyaları
  • Diğer istemci tarafı kaynak dosyaları

app.UseStaticFiles(); ifadesi, istemci tarafından doğrudan erişilebilen bu tür statik dosyaları sunar. Bu sayede tarayıcılar, bu dosyalara doğrudan erişebilir ve web sayfasının tasarımını, içeriğini ve etkileşimini düzenlemek için bu dosyaları kullanabilir.

Bu ifade, uygulamanın statik dosyaları sunabilmesini sağlar. Genellikle bu ifadeyi uygulama yapılandırmasının başında kullanırsınız. Böylece istemcilere uygulama içindeki statik dosyaları sunma yeteneği sağlanmış olur.

app.UseRouting();

app.UseRouting(); ifadesi, ASP.NET Core uygulamasında yönlendirmeyi etkinleştirmek için kullanılır. Yönlendirme, gelen istekleri uygun işlem yöntemlerine ve denetleyicilere yönlendirme işlemini ifade eder.

Bu ifade, gelen HTTP isteklerini, isteğin hedefine göre uygun işlem yolu veya denetleyiciye yönlendirmenizi sağlar. Yani isteğin URL’si ve diğer faktörler göz önünde bulundurularak hangi kodun çalıştırılacağını belirlemek için kullanılır. Bu, genellikle MVC (Model-View-Controller) tasarım deseniyle uyumlu bir şekilde çalışır.

Bu ifade, uygulamanın gelen istekleri işlemek için yönlendirmeyi etkinleştirecektir. Ancak yönlendirme yalnızca gelen isteği işlemekle sınırlıdır. İsteğin sonuç olarak nasıl işlendiğini ve dönüştürüldüğünü belirlemek için, genellikle app.UseEndpoints() ifadesiyle birlikte kullanılır. app.UseEndpoints() ifadesi, yönlendirmeyi tamamlamak ve işlemi sonlandırmak için kullanılır.

app.UseAuthorization();

app.UseAuthorization(); ifadesi, ASP.NET Core uygulamasında yetkilendirme (authorization) işlemlerini etkinleştirmek için kullanılır. Yetkilendirme, kullanıcıların belirli kaynaklara veya işlemlere erişim haklarını denetleme sürecini ifade eder. Yani bu ifade, kullanıcıların istedikleri kaynaklara erişme yetkisine sahip olup olmadığını kontrol eder.

ASP.NET Core, yetkilendirme işlemlerini etkin bir şekilde yönetmek için güçlü ve esnek bir altyapı sağlar. app.UseAuthorization(); ifadesi, yetkilendirme politikalarını uygulayarak, kullanıcıların erişim haklarını denetler ve isteğe gelen istemciye erişim iznini verir veya reddeder.

Bu ifade, uygulamanın yetkilendirme işlemlerini etkinleştirir. Ancak bu ifadenin yalnızca yetkilendirme işlemini etkinleştirdiğini unutmamanız önemlidir. Yetkilendirme politikalarını belirlemek ve kontrol etmek için ayrıca kod yazmanız gerekecektir. Örneğin, yetkilendirme gereksinimleri ve rollerinize göre, Controller veya Action seviyesinde yetkilendirme atribütleri veya gereken rolleri kontrol etmek için kodlar eklemelisiniz.

app.MapRazorPages();

app.MapRazorPages(); ifadesi, ASP.NET Core uygulamasında Razor Pages özelliğini kullanarak oluşturulan sayfaları yönlendirmek ve işlemek için kullanılır.

Razor Pages, MVC (Model-View-Controller) tasarım desenine alternatif olarak sunulan bir yaklaşımdır. Bu yaklaşım, web uygulamasını bağımsız sayfalar (razor pages) olarak düşünmeyi sağlar. Her bir razor sayfası, hem görünüm (view) hem de işlem (controller) mantığını içerir.

app.MapRazorPages(); ifadesi, gelen istekleri Razor Pages ile eşleştirmek ve doğru Razor Page’i çalıştırmak için kullanılır. Bu sayede, kullanıcıların web tarayıcılarından belirli Razor Pages’e erişmeleri ve bu sayfaların ilgili kodlarını işlemeleri sağlanır.

Bu ifade, uygulamanın Razor Pages özelliğini kullanarak oluşturulan sayfaları yönlendirmesini sağlar. Razor Pages’in temel işlevselliğini kullanarak dinamik içerikleri görüntülemeniz ve kullanıcı etkileşimleriyle çalışmanız mümkün hale gelir.

app.Run(); 

app.Run() ifadesi, ASP.NET Core uygulamasının işlemesini tamamlamak ve sonuçları istemciye iletmek için kullanılır. Bu ifade, uygulamanın son aşamasını temsil eder ve istemcilerden gelen HTTP isteklerini işlemek ve yanıtlamak için kullanılır.

app.Run() metodu, genellikle uygulama yapılandırmasının sonunda bulunur. Bu metot, gelen istekleri işleyen son aşamadır. İstekleri işlemek ve sonuçları oluşturmak için kullanıcı tarafından belirtilen kodu içerir.

Bu ifade, uygulamanın gelen istekleri işlemesini ve sonuçlarını oluşturmasını sağlar. İstekleri işlemek, işlemleri yapmak ve sonuçları istemciye geri göndermek için kullanılır. Burada özellikle belirtilen bir yönlendirme veya işlem yoksa, bu ifade uygulamanın varsayılan işlemi olarak çalışır.

app.MapControllerRoute(
    name: “default”,
    pattern: “{controller=Home}/{action=Index}/{id?}”);

Bu kod parçası, ASP.NET Core uygulamasında Controller-Action tabanlı yönlendirmeyi yapılandırmak için kullanılır. Bu yapılandırma, gelen istekleri MVC denetleyicilerine ve eylemlerine yönlendirmenizi sağlar.

app.MapControllerRoute() ifadesi, MapControllerRoute yöntemini kullanarak belirli bir isteğin nasıl yönlendirileceğini tanımlar. Bu yöntem, bir ad, bir desen (pattern) ve isteğe bağlı olarak bir id parametresi içerir. Ad, bu yönlendirmeye bir isim atamak için kullanılır. Desen, URL’nin nasıl eşleşeceğini belirler ve Controller ve Action değerleri değiştirilebilir.

Bu ifade genellikle, uygulamanın başlangıcında yer alan Configure yöntemi içinde app.UseEndpoints() ifadesiyle birlikte kullanılır.

Bu kod, varsayılan bir yönlendirmeyi tanımlar. Yani eğer URL’de belirtilen Controller veya Action değeri yoksa, istek otomatik olarak “Home” denetleyicisinin “Index” eylemine yönlendirilir. Ayrıca, isteğe bağlı olarak bir id parametresi de alabilir. Bu örnek, tipik bir Controller-Action tabanlı MVC yönlendirmesini tanımlar.

 app.UseSwagger();

app.UseSwagger(); ifadesi, ASP.NET Core uygulamasında Swagger dökümantasyon aracını etkinleştirmek için kullanılır. Swagger, RESTful API’larınızı dökümante etmek ve görselleştirmek için kullanılan açık kaynaklı bir araçtır. API’larınızın hangi rotaları desteklediğini, hangi parametreleri beklediğini, hangi yanıtları döndüğünü ve daha fazlasını görsel olarak sunar.

app.UseSwagger(); ifadesi, uygulamanızda tanımladığınız API rotalarını ve açıklamalarını otomatik olarak dökümante etmek ve düzenlemek için Swagger’ı etkinleştirir.

Bu ifade genellikle uygulama yapılandırmasının bir parçası olarak, Startup sınıfının Configure yönteminde bulunur.

Bu kod, uygulamada Swagger dökümantasyonunu etkinleştirir. Ancak, Swagger’ı kullanmaya başlamadan önce Swagger UI veya Swagger JSON dosyasının nasıl erişileceğini yapılandırmanız gerekebilir. Bu, API dökümantasyon işlevselliğini uygulamanıza eklemek ve kullanıcıların API rotalarını daha iyi anlamasını sağlamak için kullanışlıdır.

 app.UseSwaggerUI();

app.UseSwaggerUI(); ifadesi, ASP.NET Core uygulamasında Swagger dökümantasyonunun görsel kullanıcı arayüzünü (UI) etkinleştirmek için kullanılır. Swagger UI, API’larınızın dökümantasyonunu görsel olarak görüntülemenizi ve test etmenizi sağlayan bir web tabanlı arayüzdür.

Swagger UI, API rotalarınızın yanı sıra bu rotaların nasıl kullanılacağını, hangi parametreleri beklediğini, hangi yanıtları döndüğünü ve diğer ayrıntıları kullanıcı dostu bir şekilde sunar. Bu sayede geliştiriciler veya API kullanıcıları, API’larınızı daha iyi anlayabilir ve test edebilir.

Bu ifade genellikle Startup sınıfının Configure yönteminde app.UseSwaggerUI() ifadesiyle birlikte kullanılır.

Bu ifade, uygulamada Swagger UI’ı etkinleştirir. Ancak Swagger UI’ı kullanmaya başlamadan önce, Swagger JSON dökümantasyonunun nasıl erişileceğini yapılandırmanız gerekebilir. Bu, API dökümantasyon işlevselliğini tamamlamak ve kullanıcıların API rotalarını daha iyi görselleştirmek için önemlidir.

app.MapControllers();

app.MapControllers(); ifadesi, ASP.NET Core uygulamasında MVC denetleyicilerini yönlendirmek ve işlemek için kullanılır. Bu ifade, gelen istekleri belirli denetleyicilere yönlendirmek ve ilgili eylemi (action) çalıştırmak için kullanılır.

ASP.NET Core MVC, Model-View-Controller tasarım desenini takip eden bir yapıdır. Denetleyiciler, gelen istekleri işleyen ve ilgili iş mantığını uygulayan C# sınıflarıdır. app.MapControllers(); ifadesi, belirtilen denetleyicilerin hangi rotaları işleyeceğini tanımlar.

Bu ifade genellikle uygulama yapılandırmasının bir parçası olarak, Startup sınıfının Configure yönteminde bulunur.

Kodunuzun tamamlanmış ve çalışabilir bir uygulama olmasını sağlamak için Program.cs classını ve gerekli diğer bileşenleri de düzgünce yapılandırmalısınız.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

Aşağıdaki yazıları da inceleyebilirsiniz...

Sitedeki yazıları kopyalamak yasaktır.