2009-11-24 77 views
7

我有我想使用OutputCache指令缓存的页面。但是,我正在使用URL重写器模块来在此页面上定向多个URL,每个URL都有不同的内容。基于URL更改OutputCache

有什么办法可以使用缓存每个URL的输出?没有其他标准需要我改变缓存结果。

回答

10

这到底是相当简单的修复。

  1. 将以下指令添加到需要被缓存的页面:

    <%@输出缓存持续时间= “600” 位置= “下游” 的VaryByParam = “无” VaryByCustom是= “RawURL” %>

  2. 此方法添加到Global.asax文件

    public override string GetVaryByCustomString(HttpContext context, string custom) 
    { 
        switch (custom.ToUpper()) 
        { 
         case "RAWURL": 
          return context.Request.RawUrl; 
    
         default: 
          return ""; 
        } 
    } 
    
+0

这很聪明......但它仍然返回一个200而不是304(未修改),就像使用非路由URL一样。因此,虽然它可能不会再次生成页面,但客户端仍然必须重新获取它,而不是使用本地缓存。仍然是个好问题。 – harpo 2011-04-06 06:38:00

0

以编程方式,您可以使用Response.Cache来设置缓存选项。您可以打开查询字符串变量并根据具体情况适当地设置Response.Cache上的属性。

MSDN on Cache object
Another helpful article from aspalliance.com

+0

我也可以改变CAC他基于请求头,但是这些不会改变,并且没有使用查询字符串变量 – Blatfrig 2009-11-25 09:15:15