【发布时间】:2012-08-16 15:31:47
【问题描述】:
我在 Microsoft 的 MVC3 框架中使用 OutputCache 属性时遇到问题。
请想象以下控制器操作,它可以用作 AJAX 调用的一部分,以获取基于特定制造商 ID 的产品列表:
public JsonResult GetProducts(long manufacturerId)
{
return Json(this.CreateProductList(manufacturerId), JsonRequestBehavior.AllowGet);
}
我希望将此结果缓存在服务器上以避免进行过多的数据库查询。我可以通过这样配置属性来实现这一点:
[OutputCache(Duration = 3600, Location = OutputCacheLocation.Server, VaryByParam = "manufacturerId")]
这正如我所料 - 浏览器发出一个初始请求,导致服务器创建并缓存结果,来自相同或不同浏览器的后续请求获取缓存版本。
但是...我也希望浏览器在本地缓存这些结果;如果我先过滤制造商 X,然后 Y 再返回 X,我不希望它再次请求 X 的产品 - 我希望它只使用其缓存版本。
我可以通过将 OutputCache 更改为:
[OutputCache(Duration = 3600, Location = OutputCacheLocation.Client)]
这里的问题是:我如何将这些结合起来,以便我可以同时拥有两组行为?我尝试将 Location 设置为 ServerAndClient 但这只是让它的行为与 Location 为 Server 时的行为相同。
我确定问题与我使用 ServerAndClient 获得的“Vary: *”响应标头有关,但我不知道如何摆脱它。
我欢迎 cmets 关于我意图的合理性 - 我没有得到我期望的结果这一事实让我认为我可能在某个地方存在一些根本性的误解......
非常感谢。
PS:这是在本地开发环境中,来自 VS2010 的 IIS Express。
【问题讨论】:
标签: asp.net-mvc-3 http-caching