Атрибут OutputCache и jQuery Ajax не кэшируются - PullRequest
4 голосов
/ 16 декабря 2011

У меня есть простое действие контроллера MVC3, подобное этому

[HttpGet]
[OutputCache(Duration = 1200,Location=System.Web.UI.OutputCacheLocation.Server)]
public string GetTheDate()
{
    return DateTime.Now.ToString();
}

И я звоню из jQuery Ajax вот так

jQuery.ajax({
            type: "GET",
            url: "http://localhost:60690/Public/GetTheDate",
            cache: false,
            success: function (data) {
                //alert("success");
                jQuery("#stats").append("<b>" + data + "</b>");
            },
            error: function (req, status, error) { alert("failure"); alert(error + " " + status + " " + req); }
        });

Проблема в том, что дата всегда является текущей датой, а не кэшированным ответом. Насколько я понимаю, [OutputCache( Location=Server)] означает, что сервер (приложение MVC) кэширует ответ, и когда клиент запрашивает данные, действие перехватывается, чтобы не беспокоить DateTime.Now, но возвращает кэшированный ответ.

Я правильно понимаю или просто что-то делаю неправильно?

Обновление:

3nigma ответ правильный. VaryByParams="none" добивается цели, но ..... Из моего метода очевидно, что у меня нет никаких параметров, так почему я должен сказать «нет». Оказывается, что «параметры», о которых я думал, что упомянутая документация была параметрами в моем методе, на самом деле не являются параметрами в моем методе, это то, что обработчик запроса может интерпретировать как параметры.

Документация MS говорит

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

См. Бит, выделенный жирным шрифтом (мое выделение), это означает, что, хотя я не ожидаю каких-либо параметров строки запроса, если они будут отправлены (как, например, jQuery.ajax, когда кеш: ложь, добавляя к запросу GET /Public/GetTheDate?_=1324047171837 ) тогда есть параметр, ожидал я этого или нет.

1 Ответ

5 голосов
/ 16 декабря 2011

с cache: false, вы явно указываете jquery не кэшировать набор cache: true,

Редактировать

установить VaryByParam="none" как

[OutputCache(Duration=1200, VaryByParam="none",Location=System.Web.UI.OutputCacheLocation.Server)]
...