Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Eski .NET Core 3.1 ve .NET 5 Projelerini Okumak: Startup.cs'ten .NET 6'ya Geçiş
.NET Core 3.1 ve .NET 5 dönemindeki Startup.cs, Generic Host ve UseRouting/UseEndpoints yapısını okuyup aynı ASP.NET Core API'yi adım adım .NET 6'ya taşıyoruz; System.Text.Json farkları ve tuzaklar dahil.
ASP.NET Core Web API'yi Docker'a Almak ve GitHub Actions ile CI/CD Kurmak
ASP.NET Core Web API'yi multi-stage Dockerfile ile container'a alıyoruz: dotnet publish, katman cache'i, .dockerignore, port ve environment ayarları; ardından GitHub Actions ile test edip imajı ghcr.io'ya gönderen bir CI/CD hattı kuruyoruz.
ASP.NET Core Web API'de Integration Test: WebApplicationFactory ile Uçtan Uca Test
WebApplicationFactory ile ASP.NET Core Web API'yi bellekte ayağa kaldırıp HTTP seviyesinde test ediyoruz: public partial class Program, SQLite in-memory ile veritabanı değiştirmek, Location ve ProblemDetails testleri, test izolasyonu.
ASP.NET Core Web API'de Unit Test: xUnit ve Moq ile Service ve Controller Testleri
xUnit ve Moq ile ASP.NET Core Web API'de unit test: net6.0 için doğru paket sürümleri, AAA ve isimlendirme, Setup ve Verify, ActionResult<T> testlerindeki Result/Value farkı, Theory ve NSubstitute karşılaştırması.
ASP.NET Core Web API'de Health Check: Liveness, Readiness ve Veritabanı Kontrolü
ASP.NET Core Web API'de health check: AddDbContextCheck ile veritabanı kontrolü, IHealthCheck ile Redis kontrolü, liveness ve readiness ayrımı, Degraded'ın neden 200 döndüğü, JSON çıktısı ve timeout tuzakları.
ASP.NET Core Web API'de Caching: IMemoryCache, Redis ve Response Caching
ASP.NET Core Web API'de caching: IMemoryCache ile absolute ve sliding expiration, yazınca silerek invalidation, Redis ile IDistributedCache ve response caching middleware'inin hangi isteği neden cache'lemediği.
ASP.NET Core Web API'de Swagger ve OpenAPI: Swashbuckle ile Dokümantasyon
Swashbuckle ile ASP.NET Core Web API'ye OpenAPI belgesi ve Swagger UI ekliyoruz: doğru paket sürümü, XML comments, response tiplerini belgelemek, JWT için Authorize butonu ve gerçek hata mesajlarıyla sık düşülen tuzaklar.
ASP.NET Core Web API Versioning: Asp.Versioning ile URL, Query String ve Header
Breaking change'leri eski istemcileri kırmadan yayınlamak için Asp.Versioning.Mvc ile iki sürümlü bir API kuruyoruz. URL, query string ve header okuyucularını, deprecation ve Sunset header'larını deniyoruz.
ASP.NET Core Web API'de CORS ve Güvenlik: HTTPS, HSTS, Header'lar ve Secret'lar
CORS'un neden güvenlik duvarı olmadığını curl ile görüyor, politika tanımlayıp preflight isteğini okuyoruz. HTTPS yönlendirme, HSTS'in localhost istisnası, güvenlik header'ları ve user secrets da var.
ASP.NET Core Web API'de Authorization: Roller, Policy'ler ve Resource-Based Yetkilendirme
[Authorize] ve FallbackPolicy ile başlayıp rollere, policy'lere, kendi requirement ve handler'ımıza ve resource-based authorization'a geçiyoruz. RoleClaimType tuzağını ve 401 ile 403 farkını curl ile görüyoruz.
ASP.NET Core Web API'de JWT ile Authentication: Token Üretmek ve Doğrulamak
Authentication ile authorization farkından JWT'nin anatomisine, AddJwtBearer kurulumundan JsonWebTokenHandler ile token üretmeye kadar login akışını kuruyoruz. ClockSkew, claim eşleme ve refresh token fikri de var.
ASP.NET Core Web API'de Dosya Yükleme ve İndirme: IFormFile, Limitler ve Streaming
IFormFile ile ürün görseli yüklüyor, path traversal ve sahte uzantıya karşı dosyayı koruyoruz. Kestrel ve form limitlerini, PhysicalFile ile indirmeyi ve MultipartReader ile streaming'i görüyoruz.