Variera OutputCache beroende på sökvägens mapp

Jag har undrat ett tag över hur man kan basera OutputCache beroende på vilken mapp en sida ligger i, och nu kom jag på en lösning.

I mitt fall var det några User Controls som jag ville ha separata Cache-versioner av i varje mapp i applikationen. Först lade jag till följade deklaration på dessa:

<%@ OutputCache Duration="1800" VaryByParam="none"  VaryByCustom="CustomFolder"  %>

Sen overridade jag GetVaryByCustomString i Global.asax som man ska göra om man vill använda VaryByCustom.

public override string GetVaryByCustomString(
HttpContext context,
string arg)
    {
        string result = String.Empty;

        if (arg == "CustomFolder")
        {
            //object o = HttpContext.Current.Request.Path;<--This also gets the file name
           
            //Get the current folder, without the file name
            object o = HttpContext.Current.Request.Path.Substring(0,HttpContext.Current.Request.Path.LastIndexOf("/"));
            if (o != null)
            {
                result = o.ToString();
            }
        }
        else
        {
            result = base.GetVaryByCustomString(context, arg);
        }

        return result;
    }

Raden där den aktuella mappen hämtas ut blev lite lång och krånglig. Ville alltså ha bara mappen och inte filnamnet. Läste här att man kan använda Page.TemplateSourceDirectory, men kunde inte komma åt en referens till Page från Global.asax, eller hitta en motsvarande funktion i HttpContext.

By Jesper Lind
1