views:

31

answers:

1

I want to run a custom logic, before the page life-cycle, to decide what version of a cached page I want to serve to the user.

Example:

If the user is not logged, then I go to a cache dictionary, catch a version A of the page and serve to the user. Otherwise, if it's logged, then I'll see if I already cached a version of the page specific to that user. If a particular cached version doesn't exist yet, I'll let the life-cycle to complete and then I'll save it.

What I want is to manage different versions of a page and to determine whether a version or another should be served.

+2  A: 

You should be able to use VaryByCustom for this, and just let ASP.NET worry about pulling the correct version of the page from the cache etc.

In the page itself...

<%@ OutputCache Duration="60" VaryByParam="None" VaryByCustom="LoggedInUser" %>

And in your Global.asax file...

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "LoggedInUser")
    {
        if (UserIsLoggedIn())
        {
            return "LoggedInUser:" + GetUserNameOrSomeOtherUniquePerUserString();
        }
        else
        {
            return "LoggedInUser:NONE";
        }
    }
    return base.GetVaryByCustomString(context, custom);
}
LukeH