【问题标题】:Outputcache for two parameters, custom and Encoding两个参数的输出缓存,自定义和编码
【发布时间】:2013-02-09 12:46:42
【问题描述】:

有没有办法同时使用 ASP.NET Outputcache 作为页面:

  1. VaryByContentEncoding - 浏览器是否支持 gzip
  2. 通过自定义参数,在我的情况下,我使用 HttpContext.Current.Request.UserLanguages 获得的国家/地区;并从我的函数返回的文化中获取 TwoLetterISORegionName。

对于某些国家/地区,我返回相同的页面但稍作修改,但我仍希望将它们单独缓存,以便来自不同国家/地区的访问者看到不同的社交按钮。当然,是否支持 gzip 很重要,因为如果浏览器支持 gzip 压缩,我会使用 gzip 渲染 js 和 css 标签。

更新:我考虑过使用 varybycontrol,并将国家 + gzip 状态(o 或 1)都放入一个字符串中并将它们写入一个隐藏字段,然后告诉 .net 进行可变控制并通过该隐藏字段控件的 ID。不过我不确定这种方法。

谢谢。

【问题讨论】:

    标签: c# .net caching outputcache


    【解决方案1】:

    当使用 VaryByCustom 进行缓存时,您可以访问整个 Request 对象,并且可以从那里获取标头并根据您的要求创建自己的缓存键。

    public override string GetVaryByCustomString(HttpContext context, string arg)
    {
      // Do something with Request.Headers["Accept-Encoding"] (like checking if gzip is preferred...)
      return "custom-encoding-key";
    }
    

    【讨论】:

    • PageLoad 函数中的语言和 GZIP 支持签入,是否可以从那里控制输出缓存?
    • 您需要将它移动到此函数中(它将在每个请求中执行)。此外,在进行 OutputCaching 时,根本不应该执行 PageLoad 事件。
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多