Выбор настраиваемого поставщика кэша вывода для определенных действий контроллера
Я пытаюсь реализовать комбинированный поставщик выходного кэша MongoDB / Memory для использования с MVC4. Вот моя первоначальная реализация:
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)
{
}
}
И моя запись веб-конфигурации:
<caching>
<outputCache defaultProvider="CustomOutputCacheProvider">
<providers>
<add name="CustomOutputCacheProvider" type="MyApp.Base.Mvc.CustomOutputCacheProvider" />
</providers>
</outputCache>
</caching>
И использование в HomeController:
[OutputCache(Duration = 15)]
public ActionResult Index()
{
return Content("Home Page");
}
Моя проблема в том, что когда я проверяю файл журнала на наличие ключей, которые запрашиваются, я вижу не только запрос к домашнему контроллеру, но и все другие пути:
a2/ <-- should only log this entry
a2/test
a2/images/test/50115c53/1f37e409/4c7ab27d/50115c531f37e4094c7ab27d.jpg
a2/scripts/jquery-1.7.2.min.js
Я решил, что не должен устанавливать CustomOutputCacheProvider в качестве defaultProvider в Web.Config, и я не могу понять, как указать поставщика кэша, который я хочу использовать для конкретного действия контроллера.
С Asp.Net Web Pages вы можете сделать это, используя<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
в верхней части страницы, но для MVC единственное решение, которое я мог найти, это переопределитьМетод HttpApplication.GetOutputCacheProviderName в Global.asax.
Есть ли более элегантный способ сделать это с помощью атрибута [OutputCache]?