您可以在代码中找出在.NET中的页面/控件上设置的OutputCache VaryByParams值吗?

时间:2011-06-07 03:15:51

标签: asp.net httpcontext outputcache

在页面上给出outputcache这样的指令

<%@ OutputCache Duration="3600" VaryByParam="Id" %>

如何判断代码中的VaryByParam值是什么。

HttpContext.Current.Response.Cache.VaryByParams对象包含私有_parameters字典和内部IsVaryByStar属性,但没有反映到我不愿意做的对象中,我无法访问它们。是否有任何标准方法可以发现在特定请求中设置了哪些outputcache指令?

1 个答案:

答案 0 :(得分:1)

我不相信会有另一种枚举参数的方法。除了枚举参数之外,您可能还需要注意通配符("*")参数。所以我认为最简单的方法是使用反射。

另外,我不确定需要这种要求的确切用例。一些替代方法可能适用于您的要求,也可能不符合您的要求

  1. 构建您自己的控件/扩展器以接受缓存参数(而不是OutputCache指令),然后在页面生命周期的早期修改Response.Cache。
  2. 通过构建所有可能参数的字典来使用暴力攻击(但是外卡支持可能会破坏这一点,因为在这种情况下Response.Cache.Item将为所有参数返回true)。可能的替代方法是通过从基页类引入抽象方法来强制页面提供其缓存参数。