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);
        }
时间: 2024-08-06 13:08:32

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

asp.net里如何清空页面缓存的后台代码

asp.net里如何清空页面缓存的后台代码(因为只有GET请求会有缓存)   题描述:当使用ajax的时候,很有可能出现同一次请求,这里.比如buttonA修改了数据,而buttonB导出数据,如果两个按钮都采用ajax的技术来做的话,实际上buttonB在第二次点击以后,不会重新从数据库里获得一次数据,而是直接将缓存页发送给客户端.恩-这么做是好的,但是不是我们希望的.所谓使用了Ajax产生了不可预计的结果,有一部分可能也许就在于此.所以我要做的就是每次GET请求的时候都去清空缓存,然后再生成

ASP.NET MVC 阻止当前请求的视图页面缓存OutputCache

设置缓存 [OutputCache(Duration =333,VaryByCustom ="Index")] 缓存: //在action中,临时阻止该次请求的视图页面缓存 Response.Cache.SetNoServerCaching(); //可以使得默认的缓存,在规定过期时间内,除第一次访问外,都是304. Response.Cache.SetOmitVaryStar(true); 主要防范,循环参数来发起请求时,造成的大量无意义的参数生成的垃圾缓存过多,大量占用内存的情况.

ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)

本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度. 一.简单一行指令即可实现 <%@ OutputCache VaryByParam="none" Duration="300" %> 这样整个页面就被缓存了,由于我是首页进行的缓存,没有任何参数所以VaryByParam值设置为none,如果希望通过指定的参数来缓存内容可以设置"id;classid"这种形式,或者干脆就用"*",通过所有参数来

更新页面缓存OutputCache

为什么要使用OutputCache 我认为OutputCache是最简单的缓存技术了,它针对的是页面级别的,简单的一条指令就可以达到缓存的效果,有效的减轻服务器的压力和减少带宽,对于网站一些不会频繁更新内容的页面,我们可以使用OutputCache来提供性能. 为什么要更新OutputCache 作为网站的管理者,肯定要赋予他控制网站每一个部分的能力,假如网站要更新一个内容,而OutputCache还没有失效,难道要重启站点来生效吗?这时候,一个更新OutputCache的功能就显得很有必要了.

七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

注:本文为学习摘录,原文地址为:http://www.cnblogs.com/powertoolsteam/p/MVC_five.html 目录 实验22——添加页脚 实验23——实现用户角色管理 实验24——实现项目外观一致性 实验25——使用Action  过滤器让页眉和页脚代码更有效 总结 实验22——添加页脚 在本实验中,我们会在Employee 页面添加页脚,通过本实验理解分部视图. 什么是“分部视图”? 从逻辑上看,分部视图是一种可重用的视图,不会直接显示,包含于其他视图中,作为其视

asp.net mvc jqgrid 同一个页面查询不同的表,jqgrid显示不同表的表头和数据并且分页

基于我上一篇文章<a href="http://www.cnblogs.com/alasai/p/4765756.html">asp.net mvc excel导入</a>中不同的部门上传不同的excel文件类型,当在同一个页面查询时怎么办呢. 解决方案:根据传过来的表名和时间参数一次性把数据全部加载到table中,其中表头要我们一个个去定,主体的顺序我们也要和表头一样,加载到前台再用表格分页控件来分页,我这里大概有100多个excel文件类型,他们的列名都不要

Asp.net MVC 自定义错误页面以及return HttpNotFound遇到的问题

今天在处理mvc 项目404和500页面时,发现我以前比较喜欢用的Return HttpNotFound()没有跳转到我在webconfig中配置的自定义404页面,而且也不会去执行Global中的Application_Error方法,经过一番查阅资料,发现这个问题得去想别的办法去做,具体的做法有三种,如下: 1.放弃Return HttpNotFound(),适用throw new HttpException(404, "page not found"); 2.让所有的Contro

ASP.NET MVC 自定义错误页面心得

自定义错误页面的目的,就是为了能让程序在出现错误/异常的时候,能够有较好的显示体验. 所以,首先要先了解,我们可以在哪里捕获异常. 当程序发生错误的时候,我们可以在两个地方捕获: Global里面的Application_Error . HandleErrorAttribute 中的OnException.(需要新建一个类,继承HandleErrorAttribute) 那我们到底应该在哪里处理错误好呢?下面我来给大家说说他们的区别. Application_Error 程序中发生的所有异常,都

ASP.NET MVC生成静态页面

1.先付上封装好生成静态页的原代码: public class Common { #region 获取模板页的Html代码 /// <summary> /// 获取页面的Html代码 /// </summary> /// <param name="url">模板页面路径</param> /// <param name="encoding">页面编码</param> /// <returns