OutputCache属性和jQuery Ajax没有缓存

时间:2011-12-16 13:52:23

标签: asp.net-mvc-3 jquery outputcache

我有一个像这样的简单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"可以做到这一点但是.....从我的方法中可以明显看出我没有任何参数,所以我为什么要说“无”。事实证明,'Params'我认为所提到的文档是我方法中的params实际上不是我方法中的参数,它们是请求处理程序可以解释为params的任何东西。

MS documentation

  

当此属性设置为多个参数时,输出缓存   包含每个所请求文档的不同版本   指定的参数。可能的值包括“none”,“*”和 any   有效查询字符串或POST参数名称。

请参阅粗体位(我的重点),这意味着虽然我不期望任何查询字符串参数,但是如果有任何get发送(就像jQuery.ajax在缓存时所做的那样:false通过附加到请求{{1}然后有一个参数,无论我是否预期。

1 个答案:

答案 0 :(得分:5)

使用cache: false,您明确告诉jquery不要缓存集cache: true,

修改

VaryByParam="none"设置为

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