Dans ASP.NET, est-il possible de sortir du cache par nom d'hôte? c'est-à-dire VaryByHost ou Varbyhostheader?

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

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)

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

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top