.NET 9 Blazor: 2026'da Blazor United ile Full-Stack Geliştirme
.NET 9 Blazor United, statik SSR, Server ve WebAssembly render modlarını tek bir full-stack framework'te birleştirir. Render modları, streaming rendering, dependency injection ve production patterns içeren pratik rehber.

.NET 9 Blazor, modern web geliştirme dünyasında köklü bir değişime imza atıyor. Blazor United olarak bilinen bu yeni mimari yaklaşım, üç farklı render stratejisini tek bir uygulamada birleştirerek geliştiricilere benzersiz bir esneklik sunuyor. Statik sunucu tarafı render (SSR), interaktif sunucu modu ve WebAssembly tabanlı istemci tarafı render artık aynı projede sorunsuz şekilde bir arada çalışabiliyor. Bu entegrasyon, performans, SEO optimizasyonu ve kullanıcı deneyimi arasında optimal dengeyi kurmayı mümkün kılıyor.
Blazor United, .NET 9 ile gelen ve farklı render modlarını sayfa bazında seçmenize olanak tanıyan mimari bir yaklaşımdır. Aynı uygulamada bazı sayfalar statik HTML olarak render edilirken, diğerleri SignalR üzerinden gerçek zamanlı etkileşim sunabilir veya tamamen tarayıcıda WASM ile çalışabilir. Bu, her senaryo için en uygun teknolojiyi kullanarak hem performansı hem de kullanıcı deneyimini optimize eder.
.NET 9 Blazor Web Uygulaması Kurulumu
.NET 9 ile Blazor United mimarisini kullanmaya başlamak oldukça basit. Yeni proje şablonu, tüm render modlarını destekleyecek şekilde yapılandırılmış bir uygulama oluşturur. Aşağıdaki komutlar, tam özellikli bir Blazor Web uygulamasının temelini atar:
# Create a new Blazor Web App with all render modes enabled
dotnet new blazorweb -n FullStackApp --interactivity Auto --all-interactive false
cd FullStackApp
dotnet runBu komutlar, otomatik interaktivite modu etkinleştirilmiş ancak global interaktivite devre dışı bırakılmış bir proje oluşturur. Bu konfigürasyon, geliştiricilere hangi bileşenlerin interaktif olacağına dair tam kontrol sağlar. Varsayılan olarak tüm sayfalar statik render edilir ve geliştiriciler gerektiğinde belirli bileşenlere @rendermode direktifi ekleyerek interaktiviteyi açar.
Proje yapısı incelendiğinde, Components klasörü altında Pages ve Layout dizinleri görülür. Program.cs dosyası, hem sunucu tarafı hem de WebAssembly render için gerekli servisleri otomatik olarak kaydeder. Bu mimari, uygulamanın farklı bölümlerinin farklı ihtiyaçlara göre optimize edilmesine olanak tanır.
Render Modlarını Anlamak
Blazor United'ın gücü, dört farklı render modunu aynı uygulamada kullanabilme yeteneğinden gelir. Her mod, belirli kullanım senaryoları için optimize edilmiştir:
| Render Mode | Hosting | Interactivity | Best For | |---|---|---|---| | Static SSR | Server | None | Marketing pages, docs, SEO content | | Interactive Server | Server via SignalR | Full | Dashboards, CRUD, forms | | Interactive WebAssembly | Browser via WASM | Full | Offline, heavy client-side logic | | Interactive Auto | Server then WASM | Full | Best of both — fast load + independence |
Statik SSR modu, sayfa içeriğini sunucuda render eder ve tarayıcıya saf HTML gönderir. Bu yaklaşım, SEO açısından kritik olan pazarlama sayfaları, blog yazıları ve dokümantasyon için idealdir. İstemci tarafında JavaScript yükü minimal düzeydedir ve ilk sayfa yükleme süresi oldukça hızlıdır.
Interactive Server modu, SignalR üzerinden gerçek zamanlı bir bağlantı kurar. Kullanıcı etkileşimleri WebSocket üzerinden sunucuya gönderilir, işlenir ve sonuçlar geri döner. Bu mod, veri yoğun dashboardlar ve CRUD operasyonları için mükemmeldir çünkü tüm iş mantığı sunucuda kalır ve istemciye hassas kod gönderilmez:
@page "/dashboard"
@rendermode InteractiveServer
<PageTitle>Dashboard</PageTitle>
<h1>Real-Time Metrics</h1>
<!-- This component renders interactively via SignalR -->
<MetricsChart />
<!-- Static content below renders as plain HTML -->
<footer>Updated every 5 seconds</footer>Interactive WebAssembly modu, uygulamayı doğrudan tarayıcıda çalıştırır. .NET runtime'ı WASM formatında indirilir ve tüm kod istemci tarafında yürütülür. Bu yaklaşım, çevrimdışı çalışma gerektiren veya ağır istemci tarafı hesaplamalar içeren uygulamalar için uygundur. Ağ gecikmesi olmadığından kullanıcı arayüzü son derece akıcı hissedilir.
Interactive Auto modu, her iki dünyanın da avantajlarını birleştirir. İlk yüklemede SignalR ile hızlı bir başlangıç sağlar, ardından arka planda WASM runtime'ını indirir. Sonraki ziyaretlerde uygulama tamamen tarayıcıda çalışır ve sunucu bağımlılığı ortadan kalkar.
Blazor United, geliştiricilerin render modunu runtime'da tespit etmesine ve buna göre davranış sergilemesine de olanak tanır:
@if (RendererInfo.IsInteractive)
{
<button @onclick="HandleClick">Interactive Action</button>
}
else
{
<a href="/fallback">Static Fallback Link</a>
}
@code {
private void HandleClick()
{
// Runs only in interactive modes (Server or WASM)
}
}Bu adaptif yaklaşım, bileşenlerin farklı render modlarında farklı davranması gerektiğinde kritik öneme sahiptir. Örneğin, statik render sırasında event handler'lar çalışmayacağından, alternatif bir navigasyon yöntemi sunulabilir.
Streaming Rendering ile Performans Optimizasyonu
.NET 9 Blazor, streaming rendering özelliği ile sayfa yükleme deneyimini dramatik şekilde iyileştirir. Bu teknik, sayfanın başlangıç iskeletini anında render eder ve veri yüklenirken içeriği kademeli olarak günceller. Kullanıcılar boş bir ekran yerine yükleme göstergesi görür ve algılanan performans önemli ölçüde artar:
@page "/products"
@attribute [StreamRendering]
<PageTitle>Product Catalog</PageTitle>
@if (products is null)
{
<p>Loading products...</p>
}
else
{
<div class="product-grid">
@foreach (var product in products)
{
<ProductCard Item="@product" />
}
</div>
}
@code {
private List<Product>? products;
// Data loads asynchronously; streaming pushes updates to the browser
protected override async Task OnInitializedAsync()
{
products = await ProductService.GetAllAsync();
}
}[StreamRendering] attribute'u, Blazor'a sayfayı iki aşamada render etmesini söyler. İlk render sırasında products null olduğundan yükleme mesajı gösterilir. Veri yüklendiğinde, Blazor DOM'u otomatik olarak günceller ve ürün listesini görüntüler. Bu süreç, kullanıcının herhangi bir aksiyona ihtiyaç duymadan gerçekleşir.
Streaming rendering, özellikle veritabanı sorguları veya harici API çağrıları içeren sayfalar için değerlidir. Geleneksel yaklaşımda, sunucu tüm veri yüklenene kadar bekler ve sonra tam sayfayı gönderir. Streaming ile kullanıcı anında geri bildirim alır ve uygulamanın daha hızlı hissetmesini sağlar.
Birden fazla veri kaynağı olan sayfalarda, her veri seti bağımsız olarak yüklenebilir ve render edilebilir. Örneğin, bir dashboard sayfası kullanıcı bilgilerini hemen gösterirken, grafik verilerini arka planda yükleyebilir. Bu teknik, blazor interview questions 2026 hazırlıklarında sıkça karşılaşılan bir konudur çünkü performans optimizasyonu modern web uygulamalarının temel gereksinimlerinden biridir.
Constructor Injection ve Dependency Management
.NET 9 Blazor, constructor injection desteği ile dependency yönetimini modernize eder. Artık servisleri constructor aracılığıyla enjekte etmek mümkün, bu da kodun daha temiz ve test edilebilir olmasını sağlar:
@page "/orders"
@rendermode InteractiveServer
<h2>Order History</h2>
@if (orders is not null)
{
<table>
<thead>
<tr><th>Order ID</th><th>Date</th><th>Total</th></tr>
</thead>
<tbody>
@foreach (var order in orders)
{
<tr>
<td>@order.Id</td>
<td>@order.PlacedAt.ToShortDateString()</td>
<td>@order.Total.ToString("C")</td>
</tr>
}
</tbody>
</table>
}
@code {
// Constructor injection via primary constructor
[Inject] public required IOrderService OrderService { get; set; }
[Inject] public required NavigationManager Nav { get; set; }
private List<Order>? orders;
protected override async Task OnInitializedAsync()
{
orders = await OrderService.GetRecentOrdersAsync();
}
}[Inject] attribute'u ile işaretlenen propertyler, Blazor'ın dependency injection container'ı tarafından otomatik olarak doldurulur. required modifier, C# 11 ile gelen bir özellik olup, bu servislerin mutlaka sağlanması gerektiğini compile-time'da garanti eder. Bu yaklaşım, runtime null reference hatalarını önler.
Dependency injection, unit testlerde de büyük kolaylık sağlar. Test senaryolarında gerçek servisler yerine mock implementasyonlar enjekte edilebilir. Bu, bileşenlerin izolasyonda test edilmesini ve harici bağımlılıklardan bağımsız olarak davranışlarının doğrulanmasını mümkün kılar.
.NET mülakatlarında başarılı olmaya hazır mısın?
İnteraktif simülatörler, flashcards ve teknik testlerle pratik yap.
Interactive Auto Mode ile Hibrit Yaklaşım
Interactive Auto modu, blazor united full stack mimarisinin en sofistike özelliklerinden biridir. İlk sayfa yüklemesinde SignalR üzerinden hızlı interaktivite sağlarken, arka planda WebAssembly runtime'ını indirir. Sonraki navigasyonlarda uygulama tamamen istemci tarafında çalışır:
@page "/chat"
@rendermode InteractiveAuto
<h2>Live Chat</h2>
<div class="chat-messages">
@foreach (var msg in messages)
{
<div class="message">@msg.Author: @msg.Text</div>
}
</div>
<input @bind="newMessage" @onkeydown="HandleKey" placeholder="Type a message..." />
@code {
[Inject] public required IChatService ChatService { get; set; }
private List<ChatMessage> messages = new();
private string newMessage = string.Empty;
protected override async Task OnInitializedAsync()
{
messages = await ChatService.GetRecentMessagesAsync();
}
private async Task HandleKey(KeyboardEventArgs e)
{
if (e.Key == "Enter" && !string.IsNullOrWhiteSpace(newMessage))
{
await ChatService.SendAsync(newMessage);
newMessage = string.Empty;
}
}
}Bu chat bileşeni, kullanıcının ilk ziyaretinde anında çalışır çünkü SignalR bağlantısı hızlıca kurulur. Arka planda WASM dosyaları indirilir ve tarayıcı cache'ine kaydedilir. Kullanıcı sayfayı yenilediğinde veya başka bir Auto mode sayfasına gittiğinde, uygulama artık tamamen offline çalışabilir duruma gelir.
Auto mode, özellikle SPA benzeri deneyimler sunan ancak ilk yükleme süresini optimize etmek isteyen uygulamalar için idealdir. Kullanıcılar ilk ziyarette hızlı bir başlangıç yapar, ardından uygulama native bir uygulamaymış gibi akıcı çalışır.
Geliştirme sırasında Auto mode, Interactive Server gibi davranır çünkü hot reload ve hızlı iterasyon için SignalR daha uygundur. Production build'de ise tam WASM optimizasyonu devreye girer ve uygulama maksimum performansa ulaşır.
Reconnection ve Dayanıklılık Stratejileri
Interactive Server ve Auto modlarında SignalR bağlantısı, ağ kesintilerinden etkilenebilir. .NET 9 Blazor, otomatik yeniden bağlanma mekanizmaları sunar ve bu davranış özelleştirilebilir:
Blazor.start({
circuit: {
reconnectionOptions: {
retryIntervalMilliseconds: (retryNumber) => {
// Exponential backoff: 200ms, 400ms, 800ms, max 30s
return Math.min(200 * Math.pow(2, retryNumber), 30000);
},
maxRetries: 15
}
}
});Bu konfigürasyon, exponential backoff stratejisi kullanır. İlk yeniden bağlanma denemesi 200ms sonra yapılır, sonraki denemeler 400ms, 800ms şeklinde ikiye katlanır ve maksimum 30 saniyeye kadar çıkar. Toplam 15 deneme yapılır ve ardından kullanıcıya kalıcı bir hata mesajı gösterilir.
Blazor, bağlantı durumunu izlemek için CSS sınıfları da sağlar. #blazor-error-ui elementi, bağlantı kesildiğinde otomatik olarak görünür hale gelir. Geliştiriciler bu elementi özelleştirerek kullanıcı deneyimini iyileştirebilir.
Production ortamlarında, yük dengeleyiciler ve proxy sunucular SignalR bağlantısını etkileyebilir. Sticky session konfigürasyonu, kullanıcının her zaman aynı sunucu instance'ına bağlanmasını garanti eder. Azure SignalR Service gibi yönetilen servisler, bu karmaşıklığı otomatik olarak halleder ve ölçeklenebilir, güvenilir bağlantılar sağlar.
Statik SSR ile Seçici İnteraktivite
Blazor United'ın en güçlü özelliklerinden biri, global interaktivite olmadan bile belirli sayfaların tamamen statik kalabilmesidir. Bu yaklaşım, SEO kritik sayfalar için optimal performans sağlar:
@page "/privacy"
@attribute [ExcludeFromInteractiveRouting]
<PageTitle>Privacy Policy</PageTitle>
<!-- This page always renders as static HTML -->
<!-- Even if global interactivity is enabled -->
<article>
<h1>Privacy Policy</h1>
<p>Last updated: April 2026</p>
<!-- Content -->
</article>[ExcludeFromInteractiveRouting] attribute'u, bu sayfanın interactive routing sisteminin dışında tutulmasını sağlar. Kullanıcı bu sayfaya gittiğinde, tam sayfa yenileme gerçekleşir ve saf HTML render edilir. Bu, JavaScript yükü olmayan, anında yüklenen ve arama motorları tarafından mükemmel şekilde indekslenen sayfalar oluşturur.
Bu yaklaşım, asp.net blazor tutorial içeriklerinde sıkça vurgulanan bir best practice'tir. Pazarlama siteleri, blog sayfaları, yasal dokümantasyon ve hakkımızda sayfaları gibi içerikler için statik render kullanmak, hem performansı hem de SEO skorlarını önemli ölçüde artırır.
Aynı uygulamada bazı sayfalar statik, bazıları Interactive Server, bazıları ise WASM olabilir. Bu esneklik, geliştiricilerin her sayfa için en uygun teknolojiyi seçmesini sağlar.
Performance ve Ahead-of-Time (AOT) Compilation
WebAssembly modunu kullanan uygulamalarda, AOT compilation performansı dramatik şekilde artırır. AOT, .NET IL kodunu doğrudan native WebAssembly'ye derler ve runtime'da JIT compilation ihtiyacını ortadan kaldırır:
# Publish with AOT for production
dotnet publish -c Release -p:RunAOTCompilation=trueAOT compilation, uygulamanın başlangıç süresini önemli ölçüde azaltabilir ve runtime performansını iyileştirir. Ancak publish süresi uzar ve bundle boyutu artar. Bu trade-off, production uygulamalar için genellikle kabul edilebilirdir çünkü kullanıcı deneyimi kazancı önemlidir.
.NET 9, trimming optimizasyonları ile AOT build'lerin boyutunu minimize eder. Kullanılmayan kod otomatik olarak tespit edilir ve nihai bundle'dan çıkarılır. Bu özellik, özellikle mobil cihazlar ve düşük bant genişliğine sahip kullanıcılar için kritiktir.
Performans izleme için Blazor, browser DevTools ile entegre çalışır. Network tab'inde SignalR mesajları görülebilir, Performance tab'inde component render süreleri analiz edilebilir. Bu metrikler, darboğazları tespit etmek ve optimizasyon fırsatlarını belirlemek için kullanılır.
Pratik yapmaya başla!
Mülakat simülatörleri ve teknik testlerle bilgini test et.
Sonuç
.NET 9 Blazor ve Blazor United mimarisi, modern web geliştirme paradigmasını yeniden tanımlıyor. Bu makale boyunca incelenen temel noktalar şunlardır:
- Unified Architecture: Statik SSR, Interactive Server ve WebAssembly modları tek bir projede sorunsuz çalışır ve geliştiriciler sayfa bazında en uygun teknolojiyi seçebilir
- Streaming Rendering: Sayfalar kademeli olarak render edilerek algılanan performans dramatik şekilde artar ve kullanıcı deneyimi iyileşir
- Constructor Injection: Modern dependency injection patterns sayesinde kod daha temiz, test edilebilir ve bakımı kolay hale gelir
- Interactive Auto Mode: İlk yüklemede SignalR ile hızlı başlangıç, sonrasında WASM ile tam offline destek en iyi hibrit deneyimi sunar
- Resilient Connections: Özelleştirilebilir yeniden bağlanma stratejileri, ağ kesintilerine karşı dayanıklılık sağlar ve kullanıcı deneyimini korur
- Selective Interactivity: SEO kritik sayfalar statik kalırken, dashboard ve form gibi özellikler tam interaktivite sunar
- AOT Compilation: Production build'lerde native performans sağlanır ve startup süreleri minimize edilir
Blazor United, geliştiricilere her senaryoda optimal çözüm üretme esnekliği sunar. SEO gerektiren pazarlama sayfalarından gerçek zamanlı dashboardlara, offline çalışan araçlardan enterprise ölçekli uygulamalara kadar geniş bir yelpazede kullanılabilir. 2026 yılında .NET 9 Blazor, full-stack web geliştirme için en kapsamlı ve güçlü framework'lerden biri olarak öne çıkıyor.
Pratik yapmaya başla!
Mülakat simülatörleri ve teknik testlerle bilgini test et.
Etiketler
Paylaş
İlgili makaleler

Entity Framework Core: 2026 Performans Optimizasyonu ve En İyi Uygulamalar
EF Core 10 performans optimizasyonu: AsNoTracking, split query, toplu işlemler, LeftJoin ve named query filter kullanımı. Üretim ortamı için kapsamlı rehber.

.NET ile Clean Architecture: Pratik Rehber
C# ile .NET'te Clean Architecture'a hâkim olun. SOLID prensiplerini, katman ayrımını ve sürdürülebilir uygulamalar için uygulama desenlerini öğrenin.

C# ve .NET Mülakat Soruları: 2026 Kapsamlı Rehber
En sık sorulan 17 C# ve .NET mülakat sorusu. LINQ, async/await, dependency injection, Entity Framework Core ve ileri düzey mimari kalıplar detaylı cevaplarla.