您能否在代码中找出 .NET 中的页面/控件上设置了哪些 OutputCache VaryByParams 值?

发布于 2024-11-14 00:15:44 字数 378 浏览 6 评论 0原文

给定页面上这样的 outputcache 指令,

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

我如何知道代码中的 VaryByParam 值是什么。

HttpContext.Current.Response.Cache.VaryByParams 对象包含一个私有 _parameters 字典和一个内部 IsVaryByStar 属性,但不会反映到该对象中我相当不愿意这样做,我无法访问它们。是否有任何标准方法可以发现在特定请求上设置了哪些输出缓存指令?

Given an outputcache directive like this on a page

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

How can I tell what the VaryByParam value is in code.

The HttpContext.Current.Response.Cache.VaryByParams object contains a private _parameters Dictionary and an internal IsVaryByStar property, but without reflecting into the object which I'm fairly loath to do, I can't access them. Is there any standard way to discover what outputcache directives have been set on a particular request?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰火雁神 2024-11-21 00:15:44

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

另一方面,我不确定需要这种要求的确切用例。几种替代方法可能会或可能不适合您的要求,即

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

I don't believe that there would be another way to enumerate parameters. Beside enumerating parameters, you may have to look out for wild-card("*") parameter. So I believe that the simplest way would be to use reflection.

On different note, I am not certain about exact use case that needs such requirement. Couple of alternative approaches may or may not suite you requirements are

  1. Build your own control/extender to accept caching parameters (instead of OutputCache directive) and then modify Response.Cache in early page life cycle.
  2. Use brute-force attack by building dictionary of all possible parameters (but wild-card support may spoil this because in such case Response.Cache.Item will return true for all parameters). Possible alternative is to force page to give its cache parameters by introducing an abstract method from base page class.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文