In ASP.NET, è possibile eliminare la cache per nome host? cioè Varybyhost o VarbyHostheader?
-
25-09-2019 - |
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)
www.foo.com
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?
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