我在 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)]
问题来了:我如何将这些结合起来,以便我可以同时拥有两组行为?我尝试将位置设置为 ServerAndClient,但这只是使其行为与位置为服务器时相同。
我确定问题与我使用 ServerAndClient 获得的“Vary: *”响应标头有关,但我不知道如何摆脱它。
我欢迎对我的意图的合理性发表评论——事实上我没有得到我期望的结果,这让我觉得我可能在某个地方有一些根本性的误解......
非常感谢。
PS:这是在本地开发环境中,来自 VS2010 的 IIS Express。