Um dia desses um colega me perguntou como customizar, ou melhor, como variar o OutputCaching de uma página para cada usuário da aplicação. Entre as opções que a diretiva @OutputCache fornece, temos a opção VaryByCustom, especificando como valor deste atributo uma string qualquer, com a finalidade de definirmos uma informação, que indicará como proceder para capturar a “chave” que será utilizada pelo runtime, para determinar se já existe ou não uma versão do cache. Abaixo está a configuração desta diretiva:
<%@ OutputCache Duration=”60″ VaryByCustom=”UserName” VaryByParam=”none” %>
Quando utilizamos esta técnica, devemos sobrescrever o método GetVaryByCustomString da classe HttpApplication (leia-se Global.asax) e, lá colocar o código que irá retornar a string que servirá de “chave”, para que o ASP.NET use-a para determinar se já existe ou não uma versão para ela. No nosso caso, a finalidade é criar uma versão de caching para cada usuário, portanto, temos o seguinte código:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if(custom == “UserName” && context.User.Identity.IsAuthenticated)
return context.User.Identity.Name;
return base.GetVaryByCustomString(context, custom);
}