OutputCache 忽略时间戳
OutputCache Ignore Timestamp
我在 MVC 中使用 OutputCache,但是当时间戳附加到 URL 时,我很难缓存。
特别是 jQuery 的 AJAX 组件将 _=21321423432 添加到 url.
的末尾
每次我调用操作的 URL 它总是会进入操作而不是返回缓存的项目。
我正在使用 VarByCustom 和 VarybyParam 元素根据登录用户以及开始和结束日期进行缓存。
动作
[OutputCache(CacheProfile = "FeedCache")]
public async Task<JsonResult> Feed(DateTime start, DateTime end)
{
//Do something
return Json(result, JsonRequestBehavior.AllowGet);
}
配置
<add name="FeedCache" duration="600" varyByParam="start;end" varyByCustom="user" location="Server" />
Global.asmx
public override string GetVaryByCustomString(HttpContext context, string custom)
{
//
// Vary by logged in user
//
if (custom == "user")
{
return "user=" + context.User.Identity.Name;
}
return base.GetVaryByCustomString(context, custom);
}
我的印象是这会专门为用户缓存以及开始和结束参数,但事实并非如此。有什么我想念的吗?
jQuery's AJAX component appends a "_={timestamp}"
only when you set cache
option to false
or for dataTypes 'script' and 'jsonp' 您可能 return 一个 JSON 对象数组,因此请尝试将 cache:true
添加到您的 ajax 选项中。它应该类似于:
$.ajax({
type: ...,
url: ...,
cache: true,
success: function (data) {
}
});
如果我在属性中指定 OutputCache 详细信息而不是作为 webconfig 中的缓存配置文件,它就可以工作。
有效
[OutputCache(Duration = 600, Location = OutputCacheLocation.Server, VaryByParam = "start;end", VaryByCustom = "user")]
不起作用
[OutputCache(CacheProfile = "FeedCache")]
<add name="FeedCache" duration="600" varyByParam="start;end" varyByCustom="user" location="Server" />
我真的很想知道为什么他们有不同的行为...
我在 MVC 中使用 OutputCache,但是当时间戳附加到 URL 时,我很难缓存。
特别是 jQuery 的 AJAX 组件将 _=21321423432 添加到 url.
的末尾每次我调用操作的 URL 它总是会进入操作而不是返回缓存的项目。
我正在使用 VarByCustom 和 VarybyParam 元素根据登录用户以及开始和结束日期进行缓存。
动作
[OutputCache(CacheProfile = "FeedCache")]
public async Task<JsonResult> Feed(DateTime start, DateTime end)
{
//Do something
return Json(result, JsonRequestBehavior.AllowGet);
}
配置
<add name="FeedCache" duration="600" varyByParam="start;end" varyByCustom="user" location="Server" />
Global.asmx
public override string GetVaryByCustomString(HttpContext context, string custom)
{
//
// Vary by logged in user
//
if (custom == "user")
{
return "user=" + context.User.Identity.Name;
}
return base.GetVaryByCustomString(context, custom);
}
我的印象是这会专门为用户缓存以及开始和结束参数,但事实并非如此。有什么我想念的吗?
jQuery's AJAX component appends a "_={timestamp}"
only when you set cache
option to false
or for dataTypes 'script' and 'jsonp' 您可能 return 一个 JSON 对象数组,因此请尝试将 cache:true
添加到您的 ajax 选项中。它应该类似于:
$.ajax({
type: ...,
url: ...,
cache: true,
success: function (data) {
}
});
如果我在属性中指定 OutputCache 详细信息而不是作为 webconfig 中的缓存配置文件,它就可以工作。
有效
[OutputCache(Duration = 600, Location = OutputCacheLocation.Server, VaryByParam = "start;end", VaryByCustom = "user")]
不起作用
[OutputCache(CacheProfile = "FeedCache")]
<add name="FeedCache" duration="600" varyByParam="start;end" varyByCustom="user" location="Server" />
我真的很想知道为什么他们有不同的行为...