我在使用微软的MVC3框架的OutputCache属性的麻烦。
请想象一下下面的控制器动作,它可以作为一个AJAX调用的一部分得到的基于特定manufacturerId的产品列表:
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得到,但我不知道如何摆脱它。
我欢迎对我的意图的合理性意见 - 这我没有得到我希望让我觉得我可能有一些根本性的误解某处结果的事实......
非常感谢。
PS:这是在本地开发环境,IIS快递从VS2010。