1

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

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

如何避免不同大小写 URL 的重复页面缓存条目,例如:

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

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

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

有没有办法以编程方式设置这个特定请求的“唯一缓存键”应该是什么

4

1 回答 1

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;
}
于 2009-01-13T16:15:20.303 回答