SetVaryByQuery çıktı önbelleğinde sayfalama hatasına yol açar
ASP.NET Core çıktı önbelleğinde SetVaryByQuery çağrısının varsayılan politikayı nasıl değiştirdiği anlatılıyor. Sayfa parametresini listeye eklemeyi unutan bir politika, farklı sayfalara aynı yanıtı döndürebiliyor. Yazar, sorunu yeniden üreten küçük bir test ve düzeltmeyi paylaşıyor.
Kilit noktalar
- SetVaryByQuery("sort") varsayılan "*" davranışını değiştirir; page artık önbellek anahtarına dahil edilmez.
- Düzeltme: endpoint'in okuduğu tüm sorgu parametrelerini birlikte verin, örneğin SetVaryByQuery("page", "sort").
- AddPolicy ile tanımlanan adlandırılmış politikalar varsayılan politikanın üzerine kurulur; sorun yalnızca vary-by listesini daraltınca ortaya çıkar.
- Yeni bir filtre parametresi eklediğinizde vary-by listesini de güncelleyin.
- excludeDefaultPolicy: true önbelleği tamamen kapatır; bu sorunun çözümü değildir.
Bir sayfalama hatası, ASP.NET Core çıktı önbelleğinde SetVaryByQuery kullanımının yanlış anlaşılmasından kaynaklanıyor. Yazarın ürün listesi endpoint'inde sayfa ikinin, sayfa birin yanıtını döndürmesi bu yüzden oluyor. Varsayılan politika tüm sorgu parametrelerine göre önbellek anahtarı üretirken, adlandırılmış bir politikaya yalnızca sort eklemek bu davranışı kapatıyor.
SetVaryByQuery, mevcut listeye ekleme yapmaz; listeyi tamamen değiştirir. Yazar, /expire, /wrong ve /page adlı üç endpoint ile tekrar üretilebilir bir karşılaştırma yapıyor. Düzeltme, endpoint'in gerçekten okuduğu tüm sorgu anahtarlarını, örneğin page ve sort'u, SetVaryByQuery'e birlikte vermek. AddPolicy'nin excludeDefaultPolicy seçeneği ise önbelleği tamamen kapattığı için bu sorunun çözümü değil.
Gerçek dünyada kullanımı
- Sayfalama ve sıralama parametreleri olan bir ürün listesi endpoint'i çıktı önbelleğiyle hızlandırılırken.
- Birden fazla sorgu filtresi alan bir API'de adlandırılmış önbellek politikası tanımlanırken.
- Test ortamında önbellek anahtarlarının doğru ayrıldığını kontrol eden küçük bir regresyon testi yazılırken.
Neden önemli
Çıktı önbelleği yanlış vary-by listesiyle çalışırsa kullanıcılar doğru olmayan veriyi görebilir. Adlandırılmış her politikada endpoint'in bağlı olduğu tüm sorgu parametrelerini açıkça listelemek gerekir.