ASP.NET Core

ASP.NET Core'da favicon ve robots.txt isteklerini middleware zincirinden çıkarmak

Bir geliştirici, ASP.NET Core'da /favicon.ico ve /robots.txt gibi gereksiz isteklerin tüm middleware zincirinden geçtiğini ölçtü. MapShortCircuit ve ShortCircuit() ile bu rotaları zincirin dışında yanıtlamanın maliyeti nasıl düşürdüğünü gösteriyor.

DEV Community: #aspnetcore Sukhpinder Singh
Yayın tarihi
Okuma süresi
4 dk okuma
agent çalıştırması #12
agent çalıştırması #12
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • MapShortCircuit(404, "/favicon.ico", "/robots.txt") ile gürültü isteklerini routing aşamasında yanıtlayabilirsiniz.
  • Kısa devre, yalnızca UseRouting'den sonra kaydedilen middleware'leri atlar; sıralama kritiktir.
  • Route üzerinde .ShortCircuit() çağrısı, kendi health check endpoint'inizi zincirin dışına çıkarır.
  • MapShortCircuit durum kodu verilmezse varsayılan olarak 200 ve boş gövde döner; açıkça 404 gibi bir kod verin.
  • Kısa devre yapılan endpoint'ler loglama ve correlation id gibi middleware'lerden geçmez; loglarda görmek istediklerinizi hariç tutmayın.

Yazar, küçük bir ASP.NET Core servisinin loglarında tarayıcıların ve botların sormadan gönderdiği /favicon.ico ve /robots.txt isteklerinin, gerçek API çağrılarıyla aynı middleware zincirinden geçtiğini fark etti. Kimlik doğrulama, loglama ve rate limiting gibi katmanlar, sadece 404 ya da kısa bir metin döndürmek için çalışıyordu.

Çözüm olarak UseRouting sonrasında kısa devre (short-circuit) mekanizması kullanılıyor. MapShortCircuit, belirtilen yolları verilen durum koduyla routing aşamasında yanıtlıyor; .ShortCircuit() ise kendi sahip olunan bir rotayı, örneğin health check endpoint'ini, aynı şekilde zincirin dışına alıyor. Yazar, 20.000 istekte beş middleware'li zincirin tam 100.000 çalıştırma ürettiğini, kısa devre yapılan rotaların ise sıfır çalıştırma kaydettiğini ölçtü. Süre farkı da yaklaşık yarıya indi; ancak bu, loopback üzerinde yapılmış basit bir ölçüm.

Dikkat edilmesi gereken nokta, kısa devre yapılan isteklerin zincirdeki loglama ya da correlation id gibi katmanları da atlamasıdır. Bu yüzden statik gürültü rotaları için uygundur, ama loglarda görmek istediğiniz endpoint'lerde dikkatli olmalısınız.

Gerçek dünyada kullanımı

  • Herkese açık bir API'de tarayıcı ve botların ürettiği favicon.ico ve robots.txt isteklerini tenant lookup ve rate limiting'e sokmadan yanıtlamak.
  • Load balancer'ın sağlık kontrolü için yazılmış, loglanması gerekmeyen basit bir /health endpoint'ini zincirin dışında tutmak.

Neden önemli

Gereksiz isteklerin zincirde gereksiz iş yapmasını engellemenin basit ve belgelenmiş bir yolu var. Ancak kısa devre yapılan rotaların loglama ve izleme katmanlarından geçmeyeceğini bilerek karar vermeniz gerekir.

Bu özet, DEV Community: #aspnetcore üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü