Ist es in ASP.NET möglich, Cache nach Hostnamen auszugeben? dh varybyhost oder varbyhostheader?

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

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)

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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top