Я пытаюсь реализовать комбинированный поставщик кэша вывода 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)
{
}
}
И моя запись в веб-конфигурации:
И использование в 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 вы можете выполнить это, используя <%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>
в верхней части страницы, но для MVC единственным решением, которое я смог найти, является переопределение метода HttpApplication.GetOutputCacheProviderName в Global.asax.
Есть ли более элегантный способ добиться этого с помощью атрибута [OutputCache]?