Próbuję zaimplementować dostawcę pamięci podręcznej wyjścia MongoDB/Memory w celu użycia z MVC4. Oto moja pierwsza realizacja:Wybieranie niestandardowego dostawcy bufora wyjściowego dla określonych działań kontrolera
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)
{
}
}
A mój wpis web config:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
A Wykorzystanie w ciągu HomeController:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
Moim problemem jest to, kiedy sprawdzić logi dla żądane klucze, widzę nie tylko żądanie do kontrolera macierzystego, ale wszystkie inne ścieżki również:
a2/ <-- should only log this entry
a2/test
a2/images/test/50115c53/1f37e409/4c7ab27d/50115c531f37e4094c7ab27d.jpg
a2/scripts/jquery-1.7.2.min.js
Doszedłem do wniosku, że nie powinienem ustawić CustomOutputCacheProvider jako defaultProvider w Web.Config, czego nie mogłem wymyślić, jak określić dostawcę pamięci podręcznej, który chcę użyć dla określonego działania kontrolera.
Dzięki stronom internetowym Asp.Net można to zrobić, korzystając z <%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
u góry strony, ale dla MVC jedynym rozwiązaniem, jakie mogę znaleźć, jest przesłonięcie HttpApplication.GetOutputCacheProviderName Method w pliku Global.asax.
Czy istnieje bardziej elegancki sposób osiągnięcia tego poprzez użycie atrybutu [OutputCache]?
Dodano kolejną sugestię! – bUKaneer
Ciekawe, co to jest "a2/test" i jak pasuje do oryginalnego żądania 'a2 /'? –
Nie mam pojęcia, proszę o "http: // host/test". Mvc dodaje a2 (zobacz [OutputCacheAttribute.cs] (http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/98d041ae352f#src%2fSystem.Web.Mvc%2fOutputCacheAttribute.cs)) podczas generowania klucza –