HttpCachePolicy类

Namespace:System.Web
Assembly:System.Web.dll
包含可用于设置特定于缓存的 HTTP 标头以及用于控制 ASP.NET 页输出缓存的方法。

public sealed class HttpCachePolicy

继承 ObjectHttpCachePolicy

注释

有关 HTTP 标头和控制缓存的背景信息,请参阅万维网联合会(W3C)网站上提供的 RFC 2616:超文本传输协议-HTTP/1.1。、

属性

名称说明
UtcTimestampCreated获取或设置 HttpCachePolicy 的协调世界时 (UTC) 中的时间戳。
VaryByContentEncodings获取用于区分输出缓存的 Content-Encoding 标头列表。
VaryByHeaders获取将用于改变缓存输出的所有 HTTP 标头的列表。
VaryByParams获取由影响缓存的 HTTP GET 或 HTTP POST 接收的参数列表。

方法

名称说明
AddValidationCallback(HttpCacheValidateHandler, Object)注册当前响应的验证回调。
AppendCacheExtension(String)指定将文本追加到 Cache-Control HTTP 标头。
Equals(Object)确定指定的对象是否等于当前对象。
(Inherited from Object)
GetCacheability()获取 Cache-Control 指令。
GetCacheExtensions()获取缓存扩展。
GetETag()获取 ETag。
GetETagFromFileDependencies()获取状态,此状态指示是否已基于处理程序的文件依赖项的时间戳设置了 ETag 标头。
GetExpires()获取到期标头。
GetHashCode()作为默认哈希函数。
(Inherited from Object)
GetIgnoreRangeRequests()获取忽略范围请求的状态。
GetLastModifiedFromFileDependencies()基于处理程序文件依赖项的时间戳,获取 Last-Modified 标头集的状态。
GetMaxAge()获取 Cache-Control 最长时间。
GetNoServerCaching()获取当前响应的服务器缓存状态。
GetNoStore()获取存储的状态。
GetNoTransforms()获取 HTTP No-Transform 指令的状态。
GetOmitVaryStar()获取 vary: 标头的状态。
GetProxyMaxAge()获取 HTTP Cache-Control:代理最长时间。
GetRevalidation()获取 Cache-Control:用于反映 must-revalidate 或 proxy-revalidate 指令的标头。
GetType()获取当前实例的 Type。
(Inherited from Object)
GetUtcLastModified()以协调世界时 (UTC) 获取 Last-Modified HTTP 标头的值。
GetVaryByCustom()获取用于改变 HTTP 缓存的自定义字符串。
HasSlidingExpiration()获取一个值,该值指定缓存是否具有可调过期策略。
IsModified()获取一个值,该值指定 HTTP 缓存是否已被修改。
IsValidUntilExpires()获取一个值,该值指定 ASP.NET 缓存是否应忽略客户端发送的使缓存失效的 HTTP Cache-Control 标头。
MemberwiseClone()创建当前 Object 的浅表副本。
(Inherited from Object)
SetAllowResponseInBrowserHistory(Boolean)当 allow 参数为 true 时,将使响应在客户端浏览器“历史记录”缓存中可用,而不论服务器上所做的 HttpCacheability 设置是什么。
SetCacheability(HttpCacheability)将 Cache-Control 标头设置为 HttpCacheability 值之一。
SetCacheability(HttpCacheability, String)将 Cache-Control 标头设置为 HttpCacheability 值之一,并将扩展追加到指令。
SetETag(String)将 ETag HTTP 标头设置为指定的字符串。
SetETagFromFileDependencies()基于处理程序的文件依赖项的时间戳设置 ETag HTTP 标头。
SetExpires(DateTime)将 Expires HTTP 标头设置为绝对日期和时间。
SetLastModified(DateTime)将 Last-Modified HTTP 标头设置为提供的 DateTime 值。
SetLastModifiedFromFileDependencies()基于处理程序的文件依赖项的时间戳设置 Last-Modified HTTP 标头。
SetMaxAge(TimeSpan)基于指定的时间跨度设置 Cache-Control: max-age HTTP 标头。
SetNoServerCaching()停止针对当前响应的所有源服务器缓存。
SetNoStore()设置 Cache-Control: no-store HTTP 标头。
SetNoTransforms()设置 Cache-Control: no-transform HTTP 标头。
SetOmitVaryStar(Boolean)指定在按参数进行区分时,响应是否应该包含 vary: 标头。
SetProxyMaxAge(TimeSpan)基于指定的时间跨度设置 Cache-Control: s-maxage HTTP 标头。
SetRevalidation(HttpCacheRevalidation)基于提供的枚举值,将 Cache-Control HTTP 标头设置为 must-revalidate 或 proxy-revalidate 指令。
SetSlidingExpiration(Boolean)将缓存过期从绝对时间设置为可调时间。
SetValidUntilExpires(Boolean)指定 ASP.NET 缓存是否应忽略客户端发送的使缓存失效的 HTTP Cache-Control 标头。
SetVaryByCustom(String)指定自定义文本字符串,它用于改变已缓存的输出响应。
ToString()返回表示当前对象的字符串。
(Inherited from Object)

MVC 5 示例:

namespace webtest.Controllers
{
    public class NoticeController : Controller
    {
        /// <summary>
        /// 查看公告
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [OutputCache(Duration = 600, VaryByParam = "lang", Location = OutputCacheLocation.ServerAndClient)]
        public ActionResult View(int id)
        {
            /*
             加不加 Response.Cache.SetOmitVaryStar(true),服务端的缓存情况都是一样的。只是不加 SetOmitVaryStar(true) 时,对于同一个客户端浏览器,每隔一次请求,服务器端就不管客户端浏览器的缓存,重新发送页面内容,但是只要在缓存有效期内,内容还是从服务器端缓存中读取。
             */
            //加上这个,才是稳定的304状态码;否则,状态码无规律
            Response.Cache.SetOmitVaryStar(true);
            var db = new Notices().NoticeDb;
            var notice = db.GetById(id);
            if (notice == null)
            {
                return HttpNotFound();
            }
            return View(notice);
        }
    }
}

Webform示例:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Linq;
using System.Web.Caching;

namespace WebApp
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DateTime dt = Convert.ToDateTime((Convert.ToDateTime("2014-12-18 17:16:09.190") - DateTime.Now));
            Response.Write(dt.ToString());

            /*-------------------------------------------------------------------------------------*/
            string conStr = ConfigurationManager.ConnectionStrings["mytest_str"].ConnectionString;
            SqlConnection conn = new SqlConnection(conStr);
            SqlCommand cmd = new SqlCommand("select * from jg_fund", conn);
            //为cmd创建sql依赖
            SqlCacheDependency sqldepandendy = new SqlCacheDependency(cmd);
            conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            da.Dispose();
            this.GridView1.DataSource = ds;
            this.GridView1.DataBind();
            conn.Close();
            //使页面缓存和sql缓存相关联,当数据库数据变化时页面缓存过期。当然也可不使用页面缓存,只用数据缓存。
            Response.AddCacheDependency(sqldepandendy);
            /*设置页面缓存*/
            Response.Cache.SetValidUntilExpires(true); //指定ASP.NET 缓存是否应忽略由使缓存无效的客户端发送的HTTP Cache-Control 标头。
            Response.Cache.SetExpires(DateTime.Now.AddMinutes(5));
            Response.Cache.SetCacheability(HttpCacheability.Public);
            /*
             *注:
             *   (1)Response.Cache.SetValidUntilExpires(true);指定ASP.NET 缓存是否应忽略由使缓存无效的客户端发送的HTTP Cache-Control 标头。
             *   当使用了高级<%@ OutputCache - %> 页指令时,SetValidUntilExpires 方法将被自动设置为true。
             *   之所以提供此方法,是因为某些浏览器在刷新页视图时会将HTTP 缓存无效标头发送到Web 服务器并从缓存中收回该页。
             *   当validUntilExpires 参数为true 时,ASP.NET 会忽略缓存无效标头,而该页将保留在缓存中直到过期为止。
             *   (2)Response.Cache.SetCacheability(HttpCacheability.Public);将Cache-Control 标头设置为HttpCacheability 值之一。
             *   (3)实现的效果是:对查询进行缓存,直到数据库中相关数据改变或页面缓存过期(分钟过期一次)。
             */
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值