加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – MVC3 OutputCache无法按预期在Server和Client

发布时间:2020-12-16 07:10:39 所属栏目:asp.Net 来源:网络整理
导读:我在使用Microsoft的MVC3框架中的OutputCache属性时遇到了问题. 请设想以下控制器操作,该操作可用作AJAX调用的一部分,以获取基于特定manufacturerId的产品列表: public JsonResult GetProducts(long manufacturerId){ return Json(this.CreateProductList(m
我在使用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

The output cache can be located on the browser client (where the
request originated),on a proxy server (or any other server)
participating in the request,or on the server where the request was
processed. This value corresponds to the HttpCacheability.Public
enumeration value.

您可能还希望在HTTP标头中为这些请求设置Cache-control public.

编辑

看来,根据您的.Net版本的Web服务器,您可能需要包含Response.Cache.SetOmitVaryStar(true);在您的控制器操作中,按照您的建议删除Vary *标头.

详细说明了.Net 4 breaking changes release notes的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读