.net - Verwenden Sie OutputCache und GetVaryByCustomString, um denselben Inhalt für mehrere Pfade zu cachen



asp.net-mvc caching (1)

Ich habe den folgenden Code in meinem MVC-Controller:

[HttpGet]
[OutputCache(Duration = 3600, VaryByParam = "none", VaryByCustom = "app")]
public async Task<ViewResult> Index(string r)
{
   // Stuff...
}

Und ich habe die folgende Implementierung von GetVaryByCustomString in meiner Global.asax.cs-Klasse:

public override string GetVaryByCustomString(HttpContext context, string arg)
{
        switch (arg.ToLower())
        {
            case "app":
                return context.Request.Url.Host;

            default:
                return base.GetVaryByCustomString(context, arg);
        }
    }

In unserer Anwendung haben Kunden ihre eigene Subdomain (dh johndoe.app.com , janedoe.app.com ).

Daher sollte das Caching auf Subdomain variieren.

Jeder "Pfad" auf dieser vollständig qualifizierten URL sollte jedoch denselben Cache verwenden. Daher sollte der folgende Ausgabe-Cache gelesen werden:

  • johndoe.app.com/
  • johndoe.app.com/123
  • johndoe.app.com/abc

Es gibt einen erschöpfenden Grund, warum das so ist, aber kurz gesagt, es ist eine SPA-App, und der "Pfad" ist wirklich nur ein Tracker. Dies kann nicht in eine Abfragezeichenfolge geändert werden.

Wenn sich der Pfad (Tracker) ändert, wird auf die Indexmethode neu zugegriffen. Ich kann das über den Debugger sagen. Als Hinweis wird GetVaryByCustomString weiterhin aufgerufen, aber es wird aufgerufen, nachdem die Index-Methode verarbeitet wurde.

Wie kann ich den Cache basierend auf der Subdomain variieren, diesen Cache jedoch unabhängig vom Pfad (Tracker) der URL verwenden?

Wenn es etwas Nützliches bietet, hier meine MVC Routen:

routes.MapRoute(
            name: "Tracker",
            url: "{r}",
            defaults: new { controller = "Home", action = "Index", id = "" });

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

MVC Version 5.2.3, .NET 4.6.1






outputcache