asp.net-mvc-3 – MVC3 OutputCache无法按预期在Server和Client
我在使用Microsoft的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)] 这是一个问题:如何将这些组合起来以便我可以拥有这两组行为?我尝试将Location设置为ServerAndClient但这只是使它的行为与Location is Server时的行为相同. 我确定这个问题与我在ServerAndClient上获得的“Vary:*”响应头有关,但我不知道如何摆脱它. 我欢迎评论我的意图的合理性 – 事实上我没有得到我期望的结果让我觉得我可能在某处有一些根本的误解…… 非常感谢. PS:这是在本地开发环境,VS2010的IIS Express. 解决方法
您可以使用指定的OutputCacheLocation.Any
您可能还希望在HTTP标头中为这些请求设置Cache-control public. 编辑 看来,根据您的.Net版本的Web服务器,您可能需要包含Response.Cache.SetOmitVaryStar(true);在您的控制器操作中,按照您的建议删除Vary *标头. 详细说明了.Net 4 breaking changes release notes的原因. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 用任意内容封装可重用视图部分(即tile,port
- asp.net – 使用Javascript重新定位模态弹出窗口
- asp.net – MVC 4 Web API Action返回:类型vs HttpRespons
- 实体框架 – EF Codefirst和RDLC Reports
- “ASP.Net身份”如何与“Windows身份基金会”进行比较?
- asp.net-mvc – 2010初学者指南流利的nHibernate
- 如何最好地生成CSV(逗号分隔的文本文件)以便下载ASP.NET?
- asp.net – Static WebMethod中的ResolveUrl
- 将ASP.Net System.Net.Mail设置移动到Web.config
- asp.net-mvc – 转换常规的MVC网站,用于电话沟通
- asp.net – 在.NET中以编程方式添加HttpHandler的
- asp.net-mvc-4 – MVC 4中的HttpContext.Current
- asp.net – 在主页面加载中丢失了ViewState对象
- ASP.NET控件的命运
- kendo-ui – Kendo UI MVC将MultiSelect数据值发
- asp.net-mvc – 如何在MVC视图中使用Bootstrap按
- log4net 日志框架的配置
- Asp.Net WebApi接口返回值IHttpActionResult
- asp.net-mvc – 使用Entity Framework 6和ViewMo
- asp.net-mvc – Visual Studio 2012 ASP.NET MVC