如何:使用参数对页的各个版本进行缓存
更新:2007 年 11 月
有时候您希望缓存某页,但是该页可能基于查询字符串参数的值或回发中与页一起发送的值生成不同的输出。例如,如果某页根据用户所在的州显示商店的位置,则该页可能接受“州”查询字符串值,为每个州生成不同版本的页。
可以根据作为查询字符串值或窗体发送值发送的参数缓存页响应的多个版本。
说明: |
---|
在用于缓存目的时,ASP.NET 将带相同键/值对的查询字符串值或窗体发送值视为相同,无论参数传递的顺序如何。然而,对于缓存目的,参数名是区分大小写的,ASP.NET 将为大写和小写的参数名和参数值缓存不同版本的页。 |
使用参数以声明方式缓存页输出的多个版本
在 ASP.NET 页中包括 @ OutputCache 指令,该指令带有 Duration 属性。Duration 属性是必需的,并且必须将其设置为大于零的整数。
在 @ OutputCache 指令中,包括 VaryByParam 属性,并将其值设置为想要使页随之变化的查询字符串或窗体发送参数的名称。
下面的代码示例将页缓存 60 秒,并指定将要根据 City 查询字符串值或窗体发送参数缓存页输出的不同版本。
<%@ OutputCache Duration="60" VaryByParam="City" %>
说明: 如果要根据多个参数改变输出缓存,请包括以分号 (;) 作为分隔符的参数名称的列表。如果要根据所有的参数值来改变缓存,请将 VaryByParam 属性设置为星号 (*)。下面的代码示例演示如何通过 City 和 ZipCode 参数改变页输出。
使用参数以编程方式缓存页输出的多个版本
在页的 Page_Load 事件中,对 Response 对象的 Cache 属性调用 SetCacheability 和 SetExpires 方法。
将参数名指定为 Response 对象的 VaryByParams 属性的变量,并将该属性设置为 true。
下面的代码示例演示当具有不同的 Zip 参数值的请求到达服务器时,如何缓存页的多个版本。
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1.0)); Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetValidUntilExpires(true); Response.Cache.VaryByParams["Zip"] = true;
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 参数改变页输出。