【问题标题】:How to cache an HttpHandler based on session variable如何根据会话变量缓存 HttpHandler
【发布时间】:2013-07-11 01:57:15
【问题描述】:

我有一个网站,它有一个用于生成动态样式表的处理程序(实现 IHttpHandler)。它通过从会话中获取 HTML 颜色代码(基于用户所属的组织)并使用一些代码 (DotLess) 在不同位置生成具有该颜色集的样式表来实现这一点。

鉴于模板很少会更改,我认为缓存是有序的,但我当然需要使缓存依赖于我退出会话的颜色。

是否有一种简单的内置方法可以根据此值进行输出缓存?我知道我可以根据查询字符串和其他各种事情来做到这一点,但不确定是否可以在这样的会话值上完成。当然,另一种选择是创建我自己的缓存代码,但我宁愿不重新发明轮子......

【问题讨论】:

    标签: c# asp.net .net caching


    【解决方案1】:

    您可以为输出缓存创建一个缓存键,将颜色作为键的一部分...“真实”输出缓存在处理程序之前的内核级别完成,因此在处理程序级别一种根据请求改变键的方法。

    为什么不使用静态的、适当线程安全的(通过锁)字典...其中键是颜色,值是 CSS 内容?静态对象将一直存在到应用程序域终止。您可以在 Handler 本身中使用 HttpHandler 的静态字段成员来进行缓存。然后,清除所述缓存变得像清除或重新初始化静态字段成员引用一样简单。

    【讨论】:

    • 是的,想想你所说的输出缓存在它到达处理程序之前发生的事情,你不能从处理程序本身做到这一点是有道理的。我可以但希望... :)
    • 在 .NET 4.0 中有一些方法可以做到这一点 - 实现自定义输出缓存提供程序......但与静态字典相比,这有点过头了。
    • 是的,这绝对是矫枉过正,但如果我将来需要它,可以考虑一个有趣的想法。
    猜你喜欢
    • 2011-04-01
    • 2011-10-09
    • 2013-11-12
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多