Asp.net允许在输出缓存中缓存一个页的多个版本。
造成缓存多个版本的原因:
(1)初始请求 (HTTP GET) 中的查询字符串。
(2)回发时传递的控制值(HTTP POST 值)。
(3)随请求传递的 HTTP 标头。
(4)发出请求的浏览器的主版本号。
(5)该页中的自定义字符串。
缓存页多个版本方式:
(1)通过HttpCachePolicy类的属性和方法以编程方式。
(2)通过@ OutputCache指令的特性以声明方式。
VaryByParam 特性可用来声明缓存输出因查询字符串而异。
VaryByControl 特性可用来声明缓存输出因控制值而异。
VaryByHeader 特性可用来声明缓存输出因请求的 HTTP 标头而异。
VaryByCustom 特性可用来使缓存输出因浏览器类型或您定义的自定义字符串而异。
- 使用请求浏览器缓存页的各个版本
如果您的 Web 应用程序包含一个基于请求浏览器的类型创建不同输出的页,则可以按请求该页的浏览器的主版本来缓存页输出的版本。
(1)基于浏览器类型以声明方式缓存页的多个版本
1、@ OutputCache指令中必须包括Duration特性,Duration特性值必须为大于零的整数。该指令还必须包括VaryByParam或VaryByControl特性。
2、如果仅希望按浏览器缓存,则把VaryByCustom特性设置为“browser”,并把VaryByParam特性设置为“None”。
<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser" %>
(2)基于浏览器类型以编程方式缓存页的多个版本
protected void Page_Load(object sender, EventArgs e) { Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.SetVaryByCustom("browser"); }
- 使用参数对页的各个版本进行缓存
(1)使用参数以声明方式缓存页输出的多个版本
1、如果要根据多个参数改变输出缓存,设置VaryByParam特性值为带“;”号的参数列表。
2、如果根据所有参数改变输出缓存,设置VaryByParam特性值为“*”。
<%@ OutputCache Duration="60" VaryByParam="City" %>
<%@ OutputCache Duration="60" VaryByParam="City;ZipCode" %>
(2)使用参数以编程方式缓存页输出的多个版本
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.VaryByParams["City"] = true; Response.Cache.VaryByParams["Zip"] = true;