Ist es in ASP.NET möglich, Cache nach Hostnamen auszugeben? dh varybyhost oder varbyhostheader?
-
25-09-2019 - |
Frage
Ich habe eine Website mit einer Reihe von Host -Headern. Das Thema und die Daten hängen vom Host -Header ab, und verschiedene Hosts laden verschiedene aussehende Websites.
Stellen wir uns also vor, ich habe eine Website namens "Foo", die Suchergebnisse zurückgibt. In demselben Code werden beide unten aufgeführten Websites ausgeführt. es ist der gleiche Server und die gleiche Website (mit Host -Headern)
www.foo.com
www.foo.com.au
Nun, wenn ich zu gehe zu .com
, Die Seite ist blau thematisiert. Wenn ich zur .com.au
Site, es ist rot thematisiert.
Und die Daten unterscheiden sich für dasselbe Suchergebnis, basierend auf dem Hostnamen: US -Ergebnisse für .com
und australische Ergebnisse für .com.au
.
Wenn ich benutzen möchte OutputCaching
, Kann dies vom Hostnamen behandelt und verteilt werden?
Ich bin besorgt, dass nach einer Person zur .com
Site (korrekt zurückgeben wir Ergebnisse), dass eine zweite Person, die die besucht .com.au
Site und die Suche nach denselben Daten erhalten das Thema und die Ergebnisse für die .com
Seite? ˅.
Ist das Caching möglich?
Lösung
Ja, Sie können "je nach Zoll variieren". Ich benutze das gleiche:
Platzieren Sie Folgendes in Ihrem global.asax.cs:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom == "Host")
{
return context.Request.Url.Host;
}
return String.Empty;
}
Dann in Ihrem Controller:
[OutputCache(VaryByParam = "None", VaryByCustom="Host", Duration = 14400)]
public ActionResult Index()
{
return View();
}
Andere Tipps
Probier das aus Varybycustom Parameter der AusgabeCache Richtlinie.
Um zu definieren, was passiert, wenn VarybyCustom aufgerufen wird, müssen Sie die Methode GetVaryByCustomstring überschreiben:
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;
}
Der Schlüssel besteht darin, einen String -Wert für jede Instanz zurückzugeben, die Sie zwischenspeichern möchten. In Ihrem Fall müsste Ihre überragende Methode das ".com" oder ".com.au" -Teil aus der URL ausziehen und zurückgeben. Jeder unterschiedliche Wert erzeugt einen anderen Cache.
HTH