In ASP.NET, è possibile eliminare la cache per nome host? cioè Varybyhost o VarbyHostheader?

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

Domanda

Ho un sito Web che ha un certo numero di intestazioni ospitanti. Il tema e i dati dipendono dall'intestazione host e host diversi caricano siti dall'aspetto diverso.

Quindi immaginiamo di avere un sito web chiamato "Foo" che restituisce i risultati di ricerca. Lo stesso codice esegue entrambi i siti elencati di seguito. è Lo stesso server e sito Web (usando intestazioni host)

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

Ora, se vado a .com, il sito è a tema in blu. Se vado al .com.au Sito, è a tema in rosso.

E i dati sono diversi per lo stesso risultato di ricerca, in base al nome host: risultati statunitensi per .com e risultati australiani per .com.au.

Se desidero usare OutputCaching, può essere gestito e partizionato con il nome host?

Temo che dopo che una persona è andata al .com sito, (restituendo correttamente i risultati) che una seconda persona che visita il .com.au sito e ricerca degli stessi dati otterranno il tema e i risultati per il .com luogo.

La memorizzazione nella cache è possibile?

È stato utile?

Soluzione

Sì, puoi "variare in base all'usanza". Sto usando lo stesso:

Posiziona quanto segue nel tuo global.asax.cs:

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

Quindi nel tuo controller:

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

Altri suggerimenti

Dai un'occhiata al VarybyCustom parametro del Outputcache direttiva.

Per definire cosa succede quando viene chiamato VarybyCustom, è necessario sovrascrivere il metodo getVaryByCustString:

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 chiave è restituire un valore di stringa per ogni istanza che si desidera memorizzare nella cache. Nel tuo caso, il tuo metodo sovrascritto dovrebbe spogliare la parte ".com" o ".com.au" dall'URL e restituirlo. Ogni valore diverso produce una cache diversa.

Hth

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top