No ASP.NET, é possível emitir o cache pelo nome do host? ou seja, Varybyhost ou Varbyhosttheader?
-
25-09-2019 - |
Pergunta
Eu tenho um site que possui vários cabeçalhos host. O tema e os dados dependem do cabeçalho do host e os hosts diferentes carregam sites de aparência diferentes.
Então, vamos imaginar que eu tenho um site chamado "Foo" que retorna os resultados da pesquisa. O mesmo código é executado nos dois sites listados abaixo. Isso é o mesmo servidor e site (usando cabeçalhos host)
www.foo.com
www.foo.com.au
Agora, se eu for para .com
, o site é temático em azul. Se eu for para o .com.au
site, é temático em vermelho.
E os dados são diferentes para o mesmo resultado de pesquisa, com base no nome do host: Resultados dos EUA para .com
e resultados australianos para .com.au
.
Se eu quiser usar OutputCaching
, isso pode ser tratado e particionado pelo nome do host?
Estou preocupado que depois que uma pessoa vá para o .com
site, (retornando corretamente os resultados dos EUA) que uma segunda pessoa visitando o .com.au
site e pesquisa pelos mesmos dados obterão o tema e os resultados para o .com
local.
O cache é possível?
Solução
Sim, você pode "variar de acordo com o costume". Estou usando o mesmo:
Coloque o seguinte em seu global.asax.cs:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "Host")
{
return context.Request.Url.Host;
}
return String.Empty;
}
Então, em seu controlador:
[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
return View();
}
Outras dicas
Confira o Varybycustom Parâmetro do OutputCache diretivo.
Para definir o que acontece quando o VarybyCustom é chamado, você precisa substituir o método getvarybycustomstring:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if(custom == "Your_Custom_Value")
{
// Do some validation.
// Return a string for say, .com, or .com.au
}
return String.Empty;
}
A chave é retornar um valor de string para cada instância que você deseja armazenar em cache. No seu caso, seu método substituído precisaria retirar a parte ".com" ou ".com.au" do URL e devolvê -lo. Cada valor diferente produz um cache diferente.
Hth