Namespace:System.Web
Assembly:System.Web.dll
包含可用于设置特定于缓存的 HTTP
标头以及用于控制 ASP.NET
页输出缓存的方法。
public sealed class HttpCachePolicy
继承 Object
→ HttpCachePolicy
注释
有关 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)实现的效果是:对查询进行缓存,直到数据库中相关数据改变或页面缓存过期(分钟过期一次)。
*/
}
}
}