是否有任何方法可以避免重复页面缓存条目,同时允许不区分大小写的URL?

时间:2009-01-13 15:44:52

标签: c# asp.net caching outputcache

如果我有一个带有outputcaching的页面(我们称之为Employees.aspx),它接受一个名为 Company 的参数(通过查询字符串),如下所示:

http://www.example.com/Employees.aspx?Company=Google

如何避免不同类型的网址重复页面缓存条目,例如:

http://www.example.com/Employees.aspx?Company=GOOGLE
http://www.example.com/Employees.aspx?Company=GOoGlE

我通过OuputCaching指令启用了输出缓存,如下所示:

<%@ OutputCache Duration="300" VaryByParam="Company"  %>

有没有办法以编程方式设置此特定请求的“唯一缓存密钥”应该是

1 个答案:

答案 0 :(得分:3)

这样做的一种hack-esque方法是做一个VaryByCustom(而不是VaryByParam)并在那里做.ToLower / .ToUpper。

将OutputCache指令更改为以下内容:

<%@ OutputCache Duration="300" VaryByCustom="Company" VaryByParam="none" %>

...并在Global.asax.cs中为GetVaryByCustomString添加覆盖:

public override string GetVaryByCustomString(System.Web.HttpContext context, string custom)
{
    string CustomValue = "";
    switch (custom.ToLower())
    {
        case "company":
            CustomValue = context.Request.QueryString["company"] ?? "";
            CustomValue = CustomValue.ToLower();
            break;
    }
    return CustomValue;
}