Dans ASP.NET, est-il possible de sortir du cache par nom d'hôte? c'est-à-dire VaryByHost ou Varbyhostheader?
-
25-09-2019 - |
Question
J'ai un site Web qui a un certain nombre d'en-têtes d'hôte. Le thème et les données dépendent de l'en-tête de l'hôte, et différents hôtes chargent différents sites d'aspect.
Imaginons donc que j'ai un site Web appelé "FOO" qui renvoie les résultats de recherche. Le même code exécute les deux sites répertoriés ci-dessous. Il est le même serveur et site Web (en utilisant des en-têtes d'hôte)
www.foo.com
www.foo.com.au
Maintenant, si je vais à .com
, Le site est sur le thème en bleu. Si je vais au .com.au
Site, c'est sur le thème en rouge.
Et les données sont différentes pour le même résultat de recherche, basé sur le nom d'hôte: résultats américains pour .com
et les résultats australiens pour .com.au
.
Si je souhaite utiliser OutputCaching
, cela peut-il être géré et partitionné par le nom d'hôte?
Je crains qu'après qu'une personne se soit rendue au .com
site, (renvoyant correctement les résultats américains) qu'une deuxième personne visitant le .com.au
Site et la recherche des mêmes données obtiendront le thème et les résultats pour le .com
placer.
La mise en cache est-elle possible?
La solution
Oui, vous pouvez "varier selon la coutume". J'utilise la même chose:
Placez ce qui suit dans votre global.asax.cs:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "Host")
{
return context.Request.Url.Host;
}
return String.Empty;
}
Ensuite, dans votre contrôleur:
[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
return View();
}
Autres conseils
Vérifiez VARYBYCUSTOM paramètre du Outproppercache directif.
Pour définir ce qui se passe lorsque VaryByCustom est appelé, vous devez remplacer la méthode 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 clé consiste à renvoyer une valeur de chaîne pour chaque instance que vous souhaitez mettre en cache. Dans votre cas, votre méthode remplacée devrait éliminer la partie ".com" ou ".com.au" de l'URL et la renvoyer. Chaque valeur différente produit un cache différent.
Hth