我有一个像这样的简单 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
但返回缓存的响应。
我是否理解错误或者只是做错了什么?
Update :
3nigma的回答是正确的。VaryByParams="none"
确实有效,但是......从我的方法中很明显我没有任何参数,所以为什么我需要说“无”。事实证明,我认为文档中提到的“参数”是我方法中的参数,但实际上不是我方法中的参数,它们是请求处理程序可以解释为参数的任何内容。
The 微软文档 http://msdn.microsoft.com/en-us/library/system.web.ui.outputcacheparameters.varybyparam.aspx says
当该属性设置为多个参数时,输出缓存
每个包含所请求文档的不同版本
指定参数。可能的值包括“无”、“*”和任何
有效的查询字符串或 POST 参数名称。
请参阅粗体部分(我的重点),这意味着虽然我不期望任何查询字符串参数,但如果有任何参数被发送进来(就像 jQuery.ajax 在 cache:false 时通过附加到请求中所做的那样)GET /Public/GetTheDate?_=1324047171837
)然后有一个参数,无论我是否期望它。