in meiner asp.net mvc-Anwendung verwende ich das OutputCache-Attribut auf andere Aktionsmethode. Ist es möglich, die aktuellen Einträge im Cache im Zusammenhang mit dem OutputCache-Attribut anzuzeigen? Wenn ich auf System.Web.HttpContext.Current.Cache
bin, finde ich diese Art von Eintrag nicht. Vielen Dank im Voraus F.list OutputCache Eintrag
Antwort
Ausgabe-Cache ist nicht öffentlich zugänglich, so dass Sie es nicht in System.Web.HttpContext.Current.Cache
finden. In ASP.NET 2 ist es in dem _caches
Member CacheInternal
enthalten, den Sie erraten können, indem der Name ein privates Mitglied einer internen abstrakten Klasse ist. Es ist möglich, es mit Reflexion zu erhalten, obwohl es keine leichte Aufgabe ist.
Auch wenn Sie es abrufen, werden Sie sehen, dass es alle Arten von internen Cache-Einträge wie Konfigurationsdateien Pfadcache, dynamisch generierten Klassen Cache, mobile Fähigkeiten, Raw Response-Cache enthält (dies ist der Typ der Ausgabe-Cache-Elemente).
Angenommen, Sie können die Elemente filtern, die sich auf den Ausgabecache beziehen. Das Problem ist, dass sie abgesehen von der Schlüssel- und RAW-Antwort (als Byte-Array) nicht viele vom Menschen lesbare Informationen enthalten. Der Schlüssel besteht im Allgemeinen aus Informationen, wenn die Methode GET (a1) oder POST (a2) verwendet wird, der Site-Name, die relative Wurzel-URL und der Hash der abhängigen Parameter.
Ich denke, es war ein üblicher Schwachpunkt, so dass in ASP.NET 4 ein neues Konzept von benutzerdefinierten Ausgabe-Cache-Anbietern eingeführt wurde. Sie können einen eigenen Output-Cache-Provider implementieren, der von OutputCacheProvider erbt, und eine Methode bereitstellen, die alle Einträge zurückgibt. Sie können diesen Artikel überprüfen - http://weblogs.asp.net/gunnarpeipman/archive/2009/11/19/asp-net-4-0-writing-custom-output-cache-providers.aspx. Ich persönlich habe nicht in der neuen OutputCache-Infrastruktur nachgeschaut. Wenn Sie also etwas finden, wird es interessant sein, darüber zu schreiben.
Dies ist der Code zum Abrufen der internen Cache-Einträge. Sie können ihre Werte beim Debuggen in Visual Studio durchsuchen:
Type runtimeType = typeof(HttpRuntime);
PropertyInfo ci = runtimeType.GetProperty(
"CacheInternal",
BindingFlags.NonPublic | BindingFlags.Static);
Object cache = ci.GetValue(ci, new object[0]);
FieldInfo cachesInfo = cache.GetType().GetField(
"_caches",
BindingFlags.NonPublic | BindingFlags.Instance);
object cacheEntries = cachesInfo.GetValue(cache);
List<object> outputCacheEntries = new List<object>();
foreach (Object singleCache in cacheEntries as Array)
{
FieldInfo singleCacheInfo =
singleCache.GetType().GetField("_entries",
BindingFlags.NonPublic | BindingFlags.Instance);
object entries = singleCacheInfo.GetValue(singleCache);
foreach (DictionaryEntry cacheEntry in entries as Hashtable)
{
FieldInfo cacheEntryInfo = cacheEntry.Value.GetType().GetField("_value",
BindingFlags.NonPublic | BindingFlags.Instance);
object value = cacheEntryInfo.GetValue(cacheEntry.Value);
if (value.GetType().Name == "CachedRawResponse")
{
outputCacheEntries.Add(value);
}
}
}
Ich werde es am Montag versuchen und Ihnen Ergebnisse sagen. Vielen Dank. – Mauro
Hallo Branislav, gibt es eine Möglichkeit, den Cache zu filtern, um nur meine Einträge zu bekommen? Danke – Mauro
Ja, Sie können die Ausgabe-Cache-Einträge finden, die in der outputCacheEntries-Liste gesammelt wurden. Leider gibt es nicht viel zu sehen. Trotzdem hoffe ich, es hilft Ihrem Fall. –
- 1. Mehrere OutputCache in MVC
- 2. Kein OutputCache für UserControl
- 3. ASP.NET OutputCache und Postbacks
- 4. Wie erstelle ich einen benutzerdefinierten "list-type" -Eintrag zur Anfrage.POST
- 5. OutputCache basierend auf URL ändern
- 6. ASP.NET OutputCache varyByParam funktioniert nicht in Web.config
- 7. ASP.Net OutputCache: Benutzersteuerelemente, die zwischengespeichert werden
- 8. ASP.NET MVC OutputCache speichert keine benutzerdefinierten Header
- 9. Programmgesteuertes Löschen von outputcache für Controller-Aktionsmethode
- 10. OutputCache und RenderAction Cache ganze Seite
- 11. OutputCache-Dauer programmgesteuert in asp.net mvc
- 12. OutputCache Layout in Mvc ausschließen 4
- 13. OutputCache und Anmelden in ASP.NET MVC 2.0
- 14. Refresh OutputCache bei Expire C# MVC
- 15. Zentralisierung von OutputCache-Werten in ASP.Net?
- 16. C# Concurrent List Fragen
- 17. Fehlender JNDI-Eintrag
- 18. Untere Grenze am Eintrag
- 19. Erhalten Einzigartige Tupeln aus List, Python
- 20. List Control
- 21. Hot tracking list Artikelauswahl in einem Kombinationsfeld
- 22. Falscher Eintrag in Liste ausgewählt
- 23. Rekursiver Eintrag zu executePendingTransactions
- 24. StatusBar-Eintrag x von y
- 25. ASP.NET MVC OutputCache funktioniert nicht für Root-URI
- 26. Was ist die Standarddauer des asp.net MVC OutputCache-Attributs?
- 27. Kann ich OutputCache mit Dateiabhängigkeit in ASP.Net MVC verwenden?
- 28. OutputCache in der Razor-Ansichts-Engine .cshtml-Seite
- 29. OutputCache VaryByParam variiert nach Parameter, der nicht enthalten sein soll
- 30. OutputCache Fehler mit VaryByParam = "None" mit MVC RC aktualisieren
niemand kann mir helfen ??? – tartafe