Wybór dostawcy niestandardowej pamięci podręcznej dla określonych akcji kontrolera
Usiłuję zaimplementować MongoDB / Memory połączony dostawca pamięci podręcznej wyjścia do użycia z MVC4. Oto moja początkowa implementacja:
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 konfiguracji internetowej:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
A użycie w HomeController:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
Mój problem polega na tym, że gdy sprawdzam plik dziennika dla żądanych kluczy, widzę nie tylko żądanie do kontrolera domowego, ale także wszystkie inne ścieżki:
a2/ <-- should only log this entry
a2/test
a2/images/test/50115c53/1f37e409/4c7ab27d/50115c531f37e4094c7ab27d.jpg
a2/scripts/jquery-1.7.2.min.js
Zdałem sobie sprawę, że nie powinienem ustawiać CustomOutputCacheProvider jako defaultProvider w Web.Config, nie mogłem jednak określić, jak określić dostawcę pamięci podręcznej, którego chcę użyć do konkretnej akcji kontrolera.
Dzięki stronom internetowym Asp.Net możesz to zrobić za pomocą<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
na górze strony, ale dla MVC jedynym rozwiązaniem, jakie mogłem znaleźć, jest zastąpienieMetoda HttpApplication.GetOutputCacheProviderName w Global.asax.
Czy istnieje bardziej elegancki sposób osiągnięcia tego celu przy użyciu atrybutu [OutputCache]?