No ASP.NET, é possível emitir o cache pelo nome do host? ou seja, Varybyhost ou Varbyhosttheader?

StackOverflow https://stackoverflow.com/questions/2807610

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)

  1. www.foo.com
  2. 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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top