根据其复杂性,当请求 ASP.NET 页时,它可能生成许多可能的响应。例如,如果您设计一个带有 HTML 窗体(该窗体允许用户查找他们家附近的零售商位置)的页,并包括城市和邮政编码输入框,则对于每个用户,页响应可能都会有所不同。您可以选择为每个城市、每个邮政编码或两者缓存页输出的版本。
ASP.NET 允许您缓存页响应的多个版本。您可以通过与请求一起传递的 GET 查询字符串或窗体 POST 参数,通过与请求一起传递的 HTTP 标头或通过发出请求的浏览器的主版本来改变输出缓存。您还可以在页中定义自定义字符串并在应用程序的 global.asax 文件中实现它影响响应缓存的方式。
ASP.NET 允许您以声明方式和编程方式来缓存页响应的多个版本,以声明方式缓存可通过在 @ OutputCache 指令上使用属性实现,以编程方式缓存可通过使用 HttpCachePolicy 类的属性和方法来实现。
明确地说,@OutputCache 指令包括三个属性允许您缓存页输出的多个版本:
- 必需的 VaryByParam 属性允许您根据 GET 查询字符串或窗体 POST 参数来改变缓存的输出。
- VaryByHeader 属性允许您根据与请求关联的 HTTP 标头来改变缓存的输出。
- VaryByCustom 属性允许您通过浏览器类型或您定义的自定义字符串来改变缓存的输出。
注意 虽然必须将 VaryByParam 属性包括在任意 @ OutputCache 指令中,但是如果不想使用它所提供的功能,您可以将其值设置为 None。
HttpCachePolicy 类提供两个属性和一个方法,它们允许您完成与上述属性相同的操作。Boolean VaryByParams 和 VaryByHeaders 属性分别允许您指定参数和标头名(您要根据参数和标头名来改变缓存)。SetVaryByCustom 方法允许您定义根据其改变输出缓存的自定义字符串。
有关这些技术的过程和深入讨论,请参见根据参数缓存页的版本、根据 HTTP 标头缓存页的版本和根据自定义字符串缓存页的版本。