Ich versuche, einen kombinierten MongoDB/Memory-Ausgabe-Cache-Provider zur Verwendung mit MVC4 zu implementieren. Hier ist meine erste Implementierung:Auswählen des benutzerdefinierten Ausgabe-Cache-Providers für bestimmte Controller-Aktionen
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 Web-Config-Eintrag:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
Und die Nutzung innerhalb von Homecontroller:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
Mein Problem ist, wenn ich die Log-Datei für die überprüfen Schlüssel, die angefordert werden, sehe ich nicht nur die Anfrage an Heimcontroller, 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 festgestellt, dass ich den CustomOutputCacheProvider nicht als defaultProvider in Web.Config festlegen sollte, was ich nicht herausfinden konnte ist, wie man den Cache-Provider angibt, den ich für eine bestimmte Controller-Aktion verwenden möchte.
Mit Asp.Net Webseiten können Sie es erreichen, indem Sie <%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
oben auf der Seite, aber für MVC die einzige Lösung, die ich finden konnte, ist HttpApplication.GetOutputCacheProviderName Method in Global.asax zu überschreiben.
Gibt es einen eleganteren Weg, dies mit dem Attribut [OutputCache] zu erreichen?
Ein weiterer Vorschlag hinzugefügt! – bUKaneer
Aus Interesse was ist "a2/test" und wie passt es in die ursprüngliche Anfrage 'a2 /'? –
Keine Ahnung wirklich, was ich anfrage ist "http: // host/test". Mvc fügt das a2 hinzu (siehe [OutputCacheAttribute.cs] (http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/98d041ae352f#src%2fSystem.Web.Mvc%2fOutputCacheAttribute.cs)) während Sie den Schlüssel –