Auswählen eines benutzerdefinierten Ausgabe-Cache-Providers für bestimmte Controller-Aktionen
Ich versuche, einen kombinierten MongoDB / Memory-Ausgabecache-Provider für MVC4 zu implementieren. Hier ist meine erste Implementierung:
public class CustomOutputCacheProvider : OutputCacheProvider
{
public override object Get(string key)
{
FileLogger.Log(key);
return null;
}
public override object Add(string key, object entry, DateTime utcExpiry)
{
return entry;
}
public override void Set(string key, object entry, DateTime utcExpiry)
{
}
public override void Remove(string key)
{
}
}
Und mein Webkonfigurationseintrag:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
Und die Verwendung innerhalb von HomeController:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
Mein Problem ist, wenn ich die Logdatei auf die angeforderten Schlüssel überprüfe, sehe ich nicht nur die Anforderung an den Home-Controller, sondern auch alle anderen Pfade:
a2/ <-- should only log this entry
a2/test
a2/images/test/50115c53/1f37e409/4c7ab27d/50115c531f37e4094c7ab27d.jpg
a2/scripts/jquery-1.7.2.min.js
Ich habe herausgefunden, dass ich den CustomOutputCacheProvider in Web.Config nicht als Standardprovider festlegen sollte. Ich konnte nicht herausfinden, wie der Cache-Provider angegeben wird, den ich für eine bestimmte Controller-Aktion verwenden möchte.
Mit Asp.Net-Webseiten können Sie dies mithilfe von ausführen<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
am oberen Rand der Seite, aber für MVC ist die einzige Lösung, die ich finden konnte, zu überschreibenHttpApplication.GetOutputCacheProviderName-Methode in Global.asax.
Gibt es eine elegantere Möglichkeit, dies mithilfe des Attributs [OutputCache] zu erreichen?