Есть ли способ избежать дублирования записей в кэше страниц, при этом учитывая регистрозависимые URL? - PullRequest
1 голос
/ 13 января 2009

Если у меня есть страница с кэшированием вывода (назовем ее 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"  %>

Есть ли способ программно установить, каким должен быть «уникальный ключ кэша» для этого конкретного запроса

1 Ответ

3 голосов
/ 13 января 2009

Один из таких хакерских методов это сделать 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;
}
...