0

有没有办法将 ASP.NET Outputcache 用于两者的页面:

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

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

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

谢谢。

4

1 回答 1

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";
}
于 2013-02-24T05:51:17.230 回答