Кэш вывода ASP MVC 3 не работает должным образом - PullRequest
1 голос
/ 17 октября 2011

Может кто-нибудь, пожалуйста, пролить свет на это? Акция оформлена так:

 [OutputCache(Duration = 5, VaryByParam = "none")]
        public ActionResult MyAction()
{
// DO STUFF HERE...
}

MyAction вызывает представление, которое имеет форму (которая отправляет обратно в метод MyAction POSTED-Method). Механизм (отсылки назад) работает нормально. Я объявляю продолжительность 5, то есть 5 секунд (или нет?). Так что через 5 секунд, если позвоните снова

http://myAddress/MyController/MyAction

. , , акция не называется! Зачем? Что мне не хватает? Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 17 октября 2011

Попробуйте исключить кэширование на стороне клиента.(Очистите кэш в вашем браузере или используйте другой браузер, добавьте фиктивный параметр и т. Д.) Ваш браузер с большей вероятностью будет кэшировать этот контент, чем страницы без кэширования, поскольку MVC фактически отправляет клиенту предложение кэшировать контентна указанное время.Я не удивлюсь, если ваш браузер примет это предложение и решит кэшировать дольше, чем предполагалось.

В какой момент ваш серверный код снова срабатывает?20 секунд?40?Когда-либо?

0 голосов
/ 17 октября 2011

Оказывается, что это поведение было результатом ложной логики внутри метода действия. Отладка в Firebug показала следующее:

Server  ASP.NET Development Server/10.0.0.0
Date    Mon, 17 Oct 2011 18:23:46 GMT
X-AspNet-Version    4.0.30319
X-AspNetMvc-Version 3.0
Cache-Control   no-cache, no-store, must-revalidate
Pragma  no-cache
Expires -1
Content-Type    text/html; charset=utf-8
Content-Length  7057
Connection  Close

что (я думаю) является правильным поведением! Спасибо всем за помощь!

0 голосов
/ 17 октября 2011

Если вы хотите протестировать атрибут OutputCache, это очень легко сделать:= DateTime.Now;}}

Просмотр:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>@ViewBag.Time</p>

Если вы скомпилируете это действие и перейдите к домашнему действию, оно покажет текущее время.Если вы обновите его, он не будет обновляться еще 60 секунд.

В другой заметке я не уверен, что вы понимаете параметр VaryByParam.Это будет означать, что он будет кэшировать отдельные версии для параметра запроса none.

Это означает, что если у вас есть следующие URL-адреса:

/home/index
/home/index?none=abc
/home/index?none=xyz

Все они будут кэшироваться отдельно друг от друга.,Возможно, вы понимали это, но я интерпретировал ваше «нет», чтобы обозначить, что вы не хотите, чтобы оно варьировалось в зависимости от параметра, и поэтому вы добавили «нет».Если я неправильно понял ваше намерение, просто проигнорируйте эту часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...