En ASP.NET, ¿es posible emitir caché por nombre de host? es decir, ¿Varybyhost o VarbyhostTheader?

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

Pregunta

Tengo un sitio web que tiene varios encabezados host. El tema y los datos dependen del encabezado del host, y los diferentes hosts cargan sitios de diferentes aspecto.

Así que imaginemos que tengo un sitio web llamado "Foo" que devuelve los resultados de búsqueda. El mismo código ejecuta ambos sitios enumerados a continuación. Está el mismo servidor y sitio web (Usando encabezados de host)

  1. www.foo.com
  2. www.foo.com.au

Ahora, si voy a .com, el sitio es temático en azul. Si voy al .com.au Sitio, es temático en rojo.

Y los datos son diferentes para el mismo resultado de búsqueda, según el nombre del host: los resultados de los Estados Unidos para .com y resultados australianos para .com.au.

Si deseo usar OutputCaching, ¿Se puede manejar y dividir esto con el nombre del host?

Me preocupa que después de que una persona vaya al .com Sitio (devolviendo correctamente los resultados) que una segunda persona que visita el .com.au el sitio y la búsqueda de los mismos datos obtendrán el tema y los resultados para el .com sitio.

¿Es posible el almacenamiento en caché?

¿Fue útil?

Solución

Sí, puedes "variar por costumbre". Estoy usando lo mismo:

Coloque lo siguiente en su global.asax.cs:

public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom == "Host")
    {
        return context.Request.Url.Host;
    }
    return String.Empty;
}

Luego en tu controlador:

[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
    return View();
}

Otros consejos

Revisar la Varybycustom Parámetro del OutputCache directiva.

Para definir qué sucede cuando se llama a VaryByCustom, debe anular el 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;
}

La clave es devolver un valor de cadena para cada instancia que desea almacenar en caché. En su caso, su método anulado necesitaría despojar la parte ".com" o ".com.au" de la URL y devolverla. Cada valor diferente produce un caché diferente.

Hth

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top