Выбор настраиваемого поставщика кэша вывода для определенных действий контроллера

Я пытаюсь реализовать комбинированный поставщик кэша вывода 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]?

8
задан M. Mennan Kara 5 August 2012 в 18:03
поделиться