Вместо того, чтобы кататься самостоятельно, просто используйте то, что предоставлено для вас.
Как упоминалось ранее, не отключайте кэширование для всего. Например, сценарии jQuery, интенсивно используемые в ASP.NET MVC, должны быть кэшированы. На самом деле в идеале вы должны использовать CDN для тех или иных, но я хочу сказать, что некоторый контент должен быть кэширован.
Здесь я считаю, что лучше всего не использовать [OutputCache] везде, а использовать класс:
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public class NoCacheController : Controller
{
}
Все ваши контроллеры, для которых вы хотите отключить кэширование, затем наследуются от этого контроллера.
Если вам необходимо переопределить значения по умолчанию в классе NoCacheController, просто укажите параметры кэша в вашем методе действия, и параметры в вашем методе Action будут иметь приоритет.
[HttpGet]
[OutputCache(NoStore = true, Duration = 60, VaryByParam = "*")]
public ViewResult Index()
{
...
}