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

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

Ответы на вопрос(3)

Ваш ответ на вопрос