ASP.NET Core, Microsoft’un modern, açık kaynaklı ve platformlar arası web uygulama geliştirme framework’üdür. C# diliyle yazılmış uygulamaların yüksek performanslı, güvenli ve ölçeklenebilir şekilde web ortamına taşınmasını sağlar. Bu makalede, ASP.NET Core ile web uygulamalarına nasıl geçiş yapılacağı, temel yapılandırmalar ve avantajları detaylı olarak ele alınacaktır.

ASP.NET Core Nedir?

ASP.NET Core, .NET Framework’ün yerine geçen ve daha modüler yapıda tasarlanmış bir framework’tür. İlk olarak 2016 yılında yayınlanan bu yapı, daha önceki ASP.NET sürümlerinden önemli farklılıklar gösterir. En belirgin farklardan biri, platform bağımsız olmasıdır; yani Windows dışındaki işletim sistemlerinde de çalışabilir. Ayrıca modüler yapısı sayesinde sadece ihtiyaç duyulan bileşenler yüklenebilir, bu da uygulamaların boyutunu ve performansını optimize eder.

Neden ASP.NET Core Kullanılır?

Geleneksel ASP.NET uygulamaları sadece Windows tabanlı sunucularda çalışabildiği için esneklik açısından sınırlıydı. ASP.NET Core ile bu durum değişti. Hem Linux hem macOS üzerinde çalışabilen bu yapı, Docker konteynerleri ile de uyumlu hale geldi. Ayrıca, daha hızlı HTTP işlem süreçleri, yerleşik dependency injection desteği, middleware mimarisi ve Razor Pages gibi yenilikler, geliştiricilere daha verimli bir ortam sunar.

ASP.NET Core ile Web Uygulaması Oluşturmak

Bir ASP.NET Core projesi oluşturmak için öncelikle .NET SDK yüklü olmalıdır. Ardından komut satırından aşağıdaki komut çalıştırılır:

dotnet new webapp -n MyWebApp

Bu komut, Razor Pages tabanlı bir web uygulaması oluşturur. Dilerseniz, farklı şablonlar da kullanılabilir:

  • mvc: Model-View-Controller mimarisi kullanan bir uygulama
  • webapi: RESTful API geliştirmek için
  • blazor: C# ile istemci tarafı web uygulamaları geliştirmek için

Startup.cs ve Middleware Mimarisi

ASP.NET Core uygulamalarında yapılandırma işlemleri genellikle Startup.cs dosyası üzerinden yapılır. Bu dosya iki temel metoda sahiptir:

  • ConfigureServices: Uygulama servislerinin tanımlandığı yerdir. Dependency injection container’ına servisler burada eklenir.
  • Configure: HTTP request pipeline’ının yapılandırıldığı yerdir. Middleware bileşenleri burada sıralanır.

Örneğin, bir middleware bileşeni şu şekilde tanımlanabilir:

app.UseAuthentication();
app.UseAuthorization();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});

Bu yapı sayesinde her istek için yapılacak işlemler net bir şekilde sıralanır ve özelleştirilebilir.

Razor Pages ve MVC

ASP.NET Core iki temel geliştirme modelini destekler: Razor Pages ve MVC. Razor Pages, sayfa bazlı uygulamalar için daha basit bir yapı sunarken, MVC büyük ve karmaşık projelerde daha fazla kontrol sağlar. Her iki model de Razor syntax’ını kullanır ve C# ile HTML’in harmanlandığı dinamik sayfalar oluşturmayı sağlar.

Razor Pages örneği:

@page
@model IndexModel
<h1>Hoşgeldiniz @Model.UserName</h1>

Burada @page direktifi sayesinde bu dosya doğrudan bir HTTP endpoint olarak davranır.

Dependency Injection

ASP.NET Core, dependency injection (DI) özelliğini doğrudan destekler. Bu sayede servislerin yaşam döngüsünü yönetmek ve bileşenler arasında bağımlılıkları azaltmak kolaylaşır. Örneğin, bir veritabanı servisini uygulamaya şu şekilde ekleyebilirsiniz:

services.AddScoped<IUserRepository, UserRepository>();

Bu yapı sayesinde, ilgili servis otomatik olarak sınıfların constructor’larına enjekte edilir:

public class IndexModel : PageModel
{
    private readonly IUserRepository _userRepository;
    public IndexModel(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }
}

Veri Erişimi ve Entity Framework Core

ASP.NET Core, veri erişimi için Entity Framework Core kullanır. EF Core, veritabanı ile etkileşimi kolaylaştıran, ORM (Object-Relational Mapping) tabanlı bir framework’tür. Veritabanı modelleri C# sınıfları olarak tanımlanır ve LINQ sorguları ile veri işlemi yapılır.

Örnek model:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
}

DbContext örneği:

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
    }

    public DbSet<User> Users { get; set; }
}

Uygulamayı Yayınlama ve Dağıtım

ASP.NET Core uygulamaları, farklı platformlara kolayca dağıtılabilir. dotnet publish komutu ile uygulama derlenir ve gerekli dosyalar çıktı dizinine kopyalanır:

dotnet publish -c Release -o ./publish

Bu dosyalar, IIS, Nginx, Apache gibi farklı web sunucularında çalıştırılabilir. Ayrıca Docker imajı haline getirilerek konteyner ortamında çalıştırılabilir:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyWebApp.csproj", "."]
RUN dotnet restore "MyWebApp.csproj"
COPY . .
RUN dotnet build "MyWebApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyWebApp.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

Performans ve Güvenlik

ASP.NET Core, yüksek performans sunar çünkü hafif bir runtime üzerine kuruludur. Kestrel adı verilen dahili web sunucusu sayesinde uygulamalar çok daha hızlı çalışır. Ayrıca middleware tabanlı güvenlik yapıları, HTTPS zorlama, CORS politikaları ve kimlik doğrulama gibi konuları kolayca yönetebilirsiniz.

Sonuç

ASP.NET Core, C# ile web uygulamaları geliştirmek isteyenler için güçlü ve esnek bir platform sunar. Platform bağımsız yapısı, modüler mimarisi ve modern geliştirme yaklaşımları sayesinde, kurumsal çözümlerden küçük projelere kadar her ölçekte uygulama geliştirilebilir. Razor Pages, MVC, DI ve EF Core gibi yapılar ise geliştirme sürecini hızlandırır ve daha temiz kod yazılmasını sağlar. Bu nedenle, C# ile web dünyasına adım atmak isteyenler için ASP.NET Core en doğru tercihtir.