gpt4 book ai didi

asp.net-mvc-3 - OutputCache 属性和 jQuery Ajax 不缓存

转载 作者:行者123 更新时间:2023-12-01 00:11:30 27 4
gpt4 key购买 nike

我有一个像这样的简单 MVC3 Controller 操作

[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" 可以解决问题,但是......从我的方法中可以明显看出我没有任何参数,所以为什么我需要说“none”。事实证明,我认为文档中提到的“参数”是我的方法中的参数,但实际上不是我的方法中的参数,它们是请求处理程序可以解释为参数的任何内容。

MS documentation

When this property is set to multiple parameters, the output cache contains a different version of the requested document for each specified parameter. Possible values include "none", "*", and any valid query string or POST parameter name.

请参阅粗体部分(我的重点),这意味着虽然我不期望任何查询字符串参数,但如果有任何参数被发送进来(就像 jQuery.ajax 在缓存时所做的那样:通过附加到请求 GET/Public/GetTheDate?_=1324047171837 )然后有一个参数,无论我是否期望它。

最佳答案

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

编辑

VaryByParam="none" 设置为

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

关于asp.net-mvc-3 - OutputCache 属性和 jQuery Ajax 不缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8535160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com