Sto cercando di implementare un provider di cache di output combinato MongoDB/memoria da utilizzare con MVC4. Qui è la mia implementazione iniziale:Selezione del provider di cache di output personalizzato per azioni specifiche del controller
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)
{
}
}
E il mio ingresso Web di configurazione:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
E l'utilizzo all'interno di HomeController:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
Il mio problema è, quando si controlla il file di log per la chiavi richieste, vedo non solo la richiesta sul controller di casa, ma anche tutti gli altri percorsi:
a2/ <-- should only log this entry
a2/test
a2/images/test/50115c53/1f37e409/4c7ab27d/50115c531f37e4094c7ab27d.jpg
a2/scripts/jquery-1.7.2.min.js
Ho capito che non dovrei impostare CustomOutputCacheProvider come DefaultProvider in Web.Config, quello che non riuscivo a capire è come specificare il provider di cache che voglio usare per un'azione specifica del controller.
Con le pagine Web Asp.Net è possibile eseguirlo utilizzando <%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
nella parte superiore della pagina, ma per MVC l'unica soluzione che è stato possibile trovare è sovrascrivere HttpApplication.GetOutputCacheProviderName Method in Global.asax.
Esiste un modo più elegante per eseguire ciò utilizzando l'attributo [OutputCache]?
Aggiunto un altro suggerimento! – bUKaneer
Interessante cosa è 'a2/test' e come si adatta alla richiesta originale' a2/'? –
Nessuna idea, quello che richiedo è 'http: // host/test'. Mvc aggiunge a2 (vedere [OutputCacheAttribute.cs] (http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/98d041ae352f#src%2fSystem.Web.Mvc%2fOutputCacheAttribute.cs)) durante la generazione della chiave –