Ответ 1
Свойство NoStore
используется для информирования прокси-серверов и браузера о том, что они не должны хранить постоянную копию кэшированного содержимого, установив Cache-Control: no-store
в заголовок запроса.
Продолжительность просто указывает, как долго должно быть кэшировано содержимое действия контроллера, например. 10 секунд. Это установит Cache-Control: max-age
в >= 0. И также устанавливает заголовок Expires
в допустимую временную метку.
К вашему первоначальному вопросу, нет, три варианта не имеют того же значения.
[OutputCache(Duration = 0, Location = OutputCacheLocation.Client, VaryByParam = "*")]
создайте заголовок кэша, подобный этому
Cache-Control: private, max-age=0
Expires: Fri, 03 Jan 2014 12:32:15 GMT
[OutputCache(NoStore = true, Duration = 0, Location="None", VaryByParam = "*")]
создает следующий заголовок кэша:
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: -1
Это в основном то, что вы хотите увидеть, если хотите предотвратить кеширование всеми средствами. VaryByParam является необязательным (по крайней мере, в MVC5), и по умолчанию это "*", так что вы можете просто использовать [OutputCache(NoStore = true, Location = OutputCacheLocation.None)]
вместо этого.
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
даже создает общий контроль кеша...
Cache-Control: public, no-store, max-age=0
Expires: Fri, 03 Jan 2014 12:36:38 GMT
В SO есть хорошая публикация, в которой обсуждается разница между max-age = 0 и no-cache и т.д..
В конце все три могут предотвратить кеширование ваших данных, но все еще имеют разные значения.