ASP.NET MVC 3 使用页面缓存 OutputCache 需要注意的问题

项目使用MVC3框架,页面使用缓存来缓解服务器压力,使用缓存配置文件设置CacheProfile

  <system.web>
  ...........<!--其他配置节点-->
 <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="index" duration="20" enabled="true" location="Client" varyByParam="city,type"/>
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
  </system.web>

在Action上使用OutputCache特性

[OutputCache(CacheProfile="index")] 
  public ActionResult Index(string city, string type)
        {
            
            ViewBag.City = city;
            ViewBag.Type = type;
            ViewBag.Message = "欢迎使用 ASP.NET MVC!";
            var queryList = list.Where(c => c.City == city);
            return View(queryList);
        }

配置和代码完成以后,运行页面。首次页面返回200状态,按 F5后页面还是返回200的状态码,怎么回事呢,页面居然没有被缓存。。。。

原来这是ASP.NET的一个BUG,如何解决呢?我们可以在Action方法内加 Response.Cache.SetOmitVaryStar(true);这段代码。测试发现配置信息里的属性location配置为"Client"时,缓存并没有生效,页面还是无法被缓存。。。。这个太坑了吧。

将配置信息里的属性location配置为"ServerAndClient"时,页面才能被缓存。

<system.web>
...........<!--其他配置节点-->
<caching>
 <outputCacheSettings>
 <outputCacheProfiles>
 <add name="index" duration="20" enabled="true" location="ServerAndClient" varyByParam="city,type"/> 
</outputCacheProfiles> </outputCacheSettings> </caching> </system.web>
  public ActionResult Index(string city, string type)
        {
            Response.Cache.SetOmitVaryStar(true);
            ViewBag.City = city;
            ViewBag.Type = type;
            ViewBag.Message = "欢迎使用 ASP.NET MVC!";
            var queryList = list.Where(c => c.City == city);
            return View(queryList);
        }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。