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
    {
        /// 
        /// 查看公告
        /// 
        /// 
        /// 
        [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)实现的效果是:对查询进行缓存,直到数据库中相关数据改变或页面缓存过期(分钟过期一次)。
             */
        }
    }
}

你可能感兴趣的:(.NET)