OutputCache Location=Client似乎无法工作

19

我正在尝试在我的MVC应用程序中使用OutputCache属性,但是当我使用OutputCacheLocation.Client时似乎不起作用:

public class HomeController : Controller
{
    [OutputCache(Duration=15, Location=OutputCacheLocation.Client)]
    public ActionResult Client()
    {
        ViewBag.Message = "The current time is " + DateTime.Now.ToString("hh:mm:ss");

        return View();
    } 

    [OutputCache(Duration=15, Location=OutputCacheLocation.Any)]
    public ActionResult Any()
    {
        ViewBag.Message = "The current time is " + DateTime.Now.ToString("hh:mm:ss");

        return View();
    }        
}

第一个代码不使用缓存。我每秒钟都访问该页面并且时间一直在变化。第二个代码可以正常工作。它每15秒才会更新一次时间。我是否忽略了什么?我是在IE8下使用Visual Studio内置的开发服务器进行调试。


4
"Client" 的字面意思是客户端,即IE。因此,如果您手动访问页面,那么您就没有遵守规则;客户端缓存意味着您甚至不应该访问页面。 - bzlm
@bzlm 你的意思是什么?如果我导航到 /home/client 然后到另一个页面,再回到 /home/client。我不应该得到缓存的页面吗?(只要我在时间范围内)? - user60456
1
@bzlm 等等,我明白了。按 F5 键会使缓存失效,从/到导航会显示相同的页面。我不知道这一点。你应该把它发表为答案。我在互联网上搜索了很久,都找不到这个小贴士。 - user60456
@Joe,Darin帮我写了所有的答案。 :) - bzlm
1个回答

21
如果你按下 F5 键,你将会清空客户端缓存。客户端缓存的工作原理是网站上的链接指向其他视图中的 Client 操作,当用户单击这些链接时,将提供缓存版本(当然,前提是他在页面缓存的时间间隔内进行操作)。

1
有道理。事实证明,如果您只是再次输入地址,它将提供缓存版本,但您是正确的,F5只会清除缓存。 - Dismissile
2
@Dismissile,我认为这种行为在不同的浏览器中略有不同,但是通常只需在地址栏中键入地址即可遵守缓存,而按下F5键将暂时忽略缓存清除缓存资源。 - bzlm
@Darin,我已经在客户端缓存了一个页面,但是当我按F5或手动输入URL时,两个内容都没有从客户端缓存中提供服务。那么,什么样的用户操作会使内容从客户端提供服务呢?我的意思是,缓存客户端内容何时有用。我在MSDN上读到,应该将特定于用户的数据缓存在客户端,但如果它没有从客户端提供服务,那么应该怎么办?你能否在这里举个例子。 - Ashish Shukla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接