HTTP Middleware Yazarken Sık Yapılan 3 Hata

Middleware, istek ve yanıtı işleyen kritik bir katmandır. Ama yazarken yapılan hatalar uygulamayı kırabilir. Şimdi sık yapılan 3 hatayı ve çözümünü görelim.

Middleware'in işi isteği bir sonraki middleware'e geçmektir. Next() çağrısını unutursanız, istek orada kalır ve asla yanıt dönemez.

YANLIŞ:

1app.Use(async (context, next) => {
2context.Response.Headers.Add("X-Custom", "test");
3// next() çağrısı yok, istek burada takılı kalır
4});

DOĞRU:

1app.Use(async (context, next) => {
2context.Response.Headers.Add("X-Custom", "test");
3await next(); // İsteği bir sonraki middleware'e geç
4});

Çıktı: Doğru versiyonda istek devam eder, yanıt alınır. Yanlış versiyonda tarayıcı sürekli bekler.

Response başı (header) gönderildikten sonra değiştiremezsiniz. Middleware'de yanıt gövdesi yazılmadan önce header'ları ayarlamalısınız.

YANLIŞ:

1app.Use(async (context, next) => {
2await next();
3context.Response.Headers.Add("X-Processed", "true"); // Çok geç!
4});

DOĞRU:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1app.Use(async (context, next) => {
2context.Response.Headers.Add("X-Processed", "true"); // Önce header
3await next(); // Sonra next()
4});

Çıktı: Doğru versiyonda header eklenir. Yanlış versiyonda "InvalidOperationException: Headers already sent" hatası alırsınız.

Middleware'de hata oluşursa ve yakalamazsanız, tüm istek işlemi başarısız olur. Try-catch ile koruma gerekir.

YANLIŞ:

1app.Use(async (context, next) => {
2var value = int.Parse(context.Request.Query["id"]); // Hata riski!
3await next();
4});

DOĞRU:

1app.Use(async (context, next) => {
2try {
3var value = int.Parse(context.Request.Query["id"]);
4await next();
5}
6catch (FormatException) {
7context.Response.StatusCode = 400;
8await context.Response.WriteAsync("Invalid ID format");
9}
10});

Çıktı: Doğru versiyonda 400 hatası döner. Yanlış versiyonda 500 hatası ve uygulama çökebilir.

Middleware yazarken şunu unutmayın:

  • Next() çağrısını yapmayı unutmayın, istek takılıp kalır.
  • Header'ları cevap gönderilmeden ayarlayın, sonra değiştiremezsiniz.
  • Try-catch ile hataları yakalayın, uygulamanın çökmesini önleyin.

Bu üç hata çoğu middleware sorununa neden olur. İlk kez yazıyorsanız bu kontrolleri yapın.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • adlı kullanıcıya yanıt verdi
    terslale

    uygulamaya bağlı express mesela next çağırmazsan middleware orada kapanıyor ama yanıt göndermediysen tarayıcı bekler

  • adlı kullanıcıya yanıt verdi
    jeuneturc

    mı timeout kadar bekliyo ben denedim olmadı ya hemen error fırlatıyo tarayıcı next çağırmazsan middleware sonlanıyor mu direkt yoksa beklemesi gerekiyo mu

  • adlı kullanıcıya yanıt verdi
    terslale

    aynen başında next unutunca middleware chain kesiliyo sonra istek hiçbir yere gitmediği için tarayıcı sürekli bekliyo timeout kadar da bekler header

  • jeuneturc

    next unuttuk diye tarayıcı donup kalıyo bu klasik bi sorun header yazıldıktan sonra