·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> Asp.Net缓存(2)
ASP.NET 允许在输出缓存中缓存同一页的多个版本。输出缓存可能会因下列因素而异:
可以通过以下两种方法来缓存页输出的多个版本:
使用@ OutputCache指令的属性以声明方式
使用HttpCachePolicy类的属性和方法以编程方式。
@ OutputCache指令包括四个可用来缓存页输出的多个版本的属性:
注意:您必须在任何@ OutputCache指令中包括VaryByParam属性或VaryByControl属性。但是,如果您不需要使缓存输出因控制值或参数而异,则可以定义值为None的VaryByParam。
HttpCachePolicy类提供两个属性和一个方法,您可以通过它们以编程方式指定与以声明方式所能设置的缓存配置相同的缓存配置。使用VaryByParams和VaryByHeaders属性可以分别指定查询字符串参数和标头名称作为缓存策略改变依据。使用SetVaryByCustom方法可以定义要作为输出缓存改变依据的自定义字符串。
如果您的 Web 应用程序包含一个基于请求浏览器的类型创建不同输出的页,则可以按请求该页的浏览器的主版本来缓存页输出的版本。
注意:主版本和浏览器类型信息是通过HttpBrowserCapabilities对象的MajorVersion属性在当前请求中传递的。
基于浏览器类型以声明方式缓存页的多个版本:
下面的示例将导致持续缓存该页达 10 秒。输出将因浏览器类型而异。
<%@ OutputCache Duration="10" VaryByParam="None"VaryByCustom="browser" %>
基于浏览器类型以编程方式缓存页的多个版本:
下面的代码示例演示如何持续缓存页的多个版本达 1 分钟。输出将因发出请求的浏览器的类型而异。
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");}View Code
有时候您希望缓存某页,但是该页可能基于查询字符串参数的值或回发中与页一起发送的值生成不同的输出
可以根据作为查询字符串值或窗体发送值发送的参数缓存页响应的多个版本。
注意 |
在用于缓存目的时,ASP.NET 将带相同键/值对的查询字符串值或窗体发送值视为相同,无论参数传递的顺序如何。然而,对于缓存目的,参数名是区分大小写的,ASP.NET 将为大写和小写的参数名和参数值缓存不同版本的页。 |
下面的代码示例将页缓存 60 秒,并指定将要根据City查询字符串值或窗体发送参数缓存页输出的不同版本。
<%@ OutputCache Duration="60" VaryByParam="City" %>
注意 |
如果要根据多个参数改变输出缓存,请包括以分号 (;) 作为分隔符的参数名称的列表。如果要根据所有的参数值来改变缓存,请将VaryByParam属性设置为星号 (*)。下面的代码示例演示如何通过City和ZipCode参数改变页输出。 |
使用参数以编程方式缓存页输出的多个版本
下面的代码示例演示当具有不同的Zip参数值的请求到达服务器时,如何缓存页的多个版本。
C#
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByParams["Zip"] = true;
注意 |
如果要根据多个参数改变缓存的内容,请多次设置VaryByParams属性。如果要根据所有标头值改变缓存的内容,请将VaryByHeader属性设置为星号 (*)。下面的代码示例演示如何通过City和Zip参数改变页输出。 |
如何:使用 HTTP 标头对某页的各个版本进行缓存
使用 ASP.NET,您可以根据指定的 HTTP 标头的值对某页的多个版本进行缓存。当请求页时,您可以指定按传递到应用程序的单个标头、多个标头或所有标头进行缓存。
根据 HTTP 标头值以声明方式对某页的各个版本进行缓存
下面的示例将页缓存 60 秒,并根据随Accept-LanguageHTTP 标头传递的值设置要缓存的页的版本:
<%@ OutputCache Duration="60" VaryByParam="None" aryByHeader="Accept-Language" %>
注意:如果要根据多个标头改变缓存的内容,请以分号 (;) 作为分隔符包括标头名称的列表。如果要根据所有标头值改变缓存的内容,请将VaryByHeader属性设置为星号 (*)。
根据 HTTP 标头值以编程方式对某页的各个版本进行缓存
下面的代码示例演示如何为有不同的Accept-LanguageHTTP 标头值的请求,将某页的多个版本缓存一分钟之久。
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.VaryByHeaders["Accept-Language"] = true;}View Code
注意:如果要根据多个标头改变缓存的内容,需要在VaryByHeaders属性中设置多个值。如果要根据所有标头改变缓存的内容,请将VaryByHeaders["VaryByUnspecifiedParameters"] 设置为true。
如何:使用自定义字符串对页的各个版本进行缓存
除了按浏览器类型和参数进行不同的输出缓存行为外,还可以根据您定义的方法所返回的不同字符串对页输出的多个版本进行缓存。
根据自定义字符串对页进行缓存时,应首先指定要使用的自定义字符串的标识符。然后在应用程序的 Global.asax 文件中创建一个方法,该方法接受此标识符,并且返回一个值,作为进行不同的输出缓存行为的依据。
根据自定义字符串对页输出的多个版本进行缓存
下面的指令根据自定义字符串“minorversion”改变页输出。
<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>
下面的代码示例演示如何将自定义字符串设置为“minorversion”。
C#
Response.Cache.SetVaryByCustom("minorversion");
注意 |
如果试图以编程方式和声明方式设置自定义字符串,则会收到InvalidOperationException。您需要选择其中一种方法。 |
被重写的方法接受您在VaryByCustom属性或SetVaryByCustom方法中设置的字符串,作为它的arg参数。例如,有些页可能根据请求浏览器的次版本进行缓存。对于这些页,可以将VaryByCustom属性设置为“minorversion”。然后,在被重写的GetVaryByCustomString方法中,可以检查arg参数,并根据arg参数的值是否为“minorversion”返回不同的字符串。
下面的代码示例演示一个 Global.asax 文件,其中的GetVaryByCustomString方法