2013-02-24 46 views
0

有一种使用ASP.NET的输出缓存的页面两种方式:输出缓存为两个参数,自定义和编码

  1. VaryByContentEncoding - 无论是浏览器支持gzip或不
  2. 通过定制PARAM,在我的国家,我从使用HttpContext.Current.Request.UserLanguages;并从我的函数返回的文化中获取TwoLetterISORegionName。

对于一些国家我返回相同的页面,但稍作修改,但我仍然希望这些缓存分开,以便来自不同国家的访问者看到不同的社交按钮。当然,对gzip的支持是非常重要的,因为如果浏览器支持gzip压缩,我会使用gzip呈现js和css标签。

更新:我想过使用varybycontrol,并把该国+ gzip的状态(0或1),两者成字符串,并将其写入到一个隐藏字段,不是告诉.NET来varybycontrol和合格的ID隐藏的现场控制。虽然我不确定这种方法。

谢谢。

回答

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"; 
} 
+0

语言和GZIP支持检查在pageLoad函数中,有没有从那里控制输出缓存的选项? – 2013-02-24 06:38:27

+0

您需要将其移至此函数内(它将在每个请求中执行)。另外,在执行OutputCaching时,PageLoad事件根本不应该被执行。 – Allov 2013-02-24 06:44:57