This article has been localized into German by the community.
Ausgabe Cache
In ASP.NET WebForms sowie in ASP.NET MVC-Versionen vor dem Core Framework war das Konzept von OutputCache vorhanden. Es war extrem einfach, ganze Seiten / Ansichten zwischenzuspeichern, wie wir es im vorherigen Artikel mit ResponseCache gesehen haben, aber im Speicher des Webservers.
Das Konzept von OutputCache (AusgabeCache) hat es noch nicht in die Core-Version des .NET-Frameworks geschafft. Zum Glück hat die Community jedoch eine Version entwickelt, die auf In-Memory-Caching basiert und Ihnen die gleichen Möglichkeiten bietet wie die OutputCache-Funktionen, die in früheren Versionen integriert wurden. Tatsächlich gibt es wahrscheinlich mehrere Implementierungen, aber ich werde diesen Artikel auf dem WebEssentials.AspNetCore.OutputCaching NuGet Paket basieren.
Sobald Sie dieses Paket in Ihrem Projekt installiert haben, müssen Sie nur ein paar kleine Anpassungen in Ihrer Datei Startup.cs vornehmen, um die OutputCache-Direktive zu verwenden:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddOutputCaching();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseOutputCaching();
app.UseMvcWithDefaultRoute();
}
}
Die "Magie" tritt beim Aufruf von services.AddOutputCaching() und app.UseOutputCaching() auf. Jetzt unterstützt Ihre Website das Zwischenspeichern von Ausgaben und Sie können es folgendermaßen verwenden:
[OutputCache(Duration = 120)]
public IActionResult Index()
{
...
Jetzt wird Ihre Seite 120 Sekunden lang im Speicher des Webservers zwischengespeichert und erst bei der ersten Anforderung (und dann erneut, wenn der Cache abgelaufen ist) generiert. Wenn Sie dies überprüfen möchten, können Sie entweder mit dem Debuggen des Projekts beginnen, nachdem Sie einen Haltepunkt in der Aktion / Methode festgelegt haben, oder Sie können eine DateTime-Instanz übergeben und diese dann wie folgt in der Ansicht ausgeben:
Controller:
[OutputCache(Duration = 120)]
public IActionResult Index()
{
return View(DateTime.Now);
}
View:
@model DateTime
Time of request: @Model.ToString()
Fordern Sie die Seite an und stellen Sie fest, dass Datum und Uhrzeit auch beim erneuten Laden der Seite gleich bleiben, bis der Cache abgelaufen ist.
AusgabeCache Optionen
Bei der Verwendung des OutputCache haben wir bereits eine sehr wichtige Option verwendet: Die Duration (Dauer). Hiermit wird dem Framework mitgeteilt, wie lange es sich auf die zwischengespeicherte Version verlassen kann, bevor sie aktualisiert werden muss. Es gibt jedoch mehrere andere relevante Optionen:
Parameter variieren
Ohne weitere Optionen als die Dauer wird die Anforderung zwischengespeichert, unabhängig davon, was passiert, und an alle anderen Benutzer gesendet. In vielen Situationen kann sich Ihre Seite jedoch ändern, je nachdem, wie der Benutzer darauf zugreift. Beispielsweise können Sie Parameter in der Abfragezeichenfolge verwenden, um unterschiedliche Inhalte bereitzustellen, je nachdem, wie der Benutzer dies anfordert.
/Users/Details?id=1
/Users/Details?id=2
....
In einer solchen Situation möchten Sie, dass die Zwischenspeicherung den Parameter des Namens "id" bei der Zwischenspeicherung des Inhalts berücksichtigt. Dies ist mit der Option VaryByParam einfach zu bewerkstelligen:
[OutputCache(Duration = 120, VaryByParam = "id")]
public IActionResult Details(int id)
{
return View(id);
}
Abhängig davon, welcher Wert an den Parameter id übergeben wurde, können jetzt mehrere Versionen der Detailansicht im Cache vorhanden sein. Sie können mehrere Parameternamen wie folgt angeben:
[OutputCache(Duration = 120, VaryByParam = "id,page,time")]
public IActionResult Details(int id)
{
...
Header variieren
Sie können den Inhalt auch basierend auf den vom Client an den Server gesendeten Headern variieren, z.B.: "User-Agent", der einen Client (einen Webbrowser) identifiziert. Es kann wie folgt verwendet werden:
[OutputCache(Duration = 120, VaryByHeader = "User-Agent")]
public IActionResult Index()
{
return View(DateTime.Now);
}
Der Inhalt hängt davon ab, welcher Browser verwendet wird, und es gibt natürlich viele andere Arten von Headern, die Sie verwenden können. Weitere Informationen finden Sie unter Liste der HTTP-Header-Felder.
Zusammenfassung
Dank des OutputCaching NuGet-Pakets können Sie dieselbe Art von OutputCache-Funktionalität wie zuvor in ASP.NET WebForms und früheren Versionen des MVC-Frameworks verwenden.