Ich suche nach einer Methode zum Deaktivieren des Browser-Caches für eine gesamte ASP.NET MVC-Website
Ich habe folgende Methode gefunden:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Und auch eine Meta-Tag-Methode (funktioniert bei mir nicht, da einige MVC-Aktionen teilweise HTML / JSON über Ajax senden, ohne Kopf, Meta-Tag).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Ich suche jedoch nach einer einfachen Methode, um den Browser-Cache für eine gesamte Website zu deaktivieren.
asp.net
asp.net-mvc
caching
browser-cache
Palani
quelle
quelle
Antworten:
Alle Anfragen werden zuerst über default.aspx geleitet - vorausgesetzt, Sie können einfach den Code dahinter einfügen.
quelle
Erstellen Sie eine Klasse, die von IActionFilter erbt.
Dann setzen Sie Attribute wo nötig ...
quelle
if (filterContext.IsChildAction) return;
oben hinzufügen. Dadurch wird verhindert, dass die äußere Aktion nicht zwischengespeichert wird, wenn eine untergeordnete Aktion aufgerufen wird, die mitNoCache
Attributen versehen ist. Mit anderen Worten, dasNoCache
Attribut wird nicht an andere Aktionen weitergegeben, wenn sie untergeordnete Aktionen ausführen. Außerdem sollte der Klassenname derNoCacheAttribute
allgemein anerkannten Namenskonvention für Attribute entsprechen.Verwenden Sie einfach das, was für Sie bereitgestellt wird, anstatt Ihre eigenen zu rollen.
Deaktivieren Sie, wie bereits erwähnt, das Caching nicht für alles. Beispielsweise sollten in ASP.NET MVC häufig verwendete jQuery-Skripts zwischengespeichert werden. Eigentlich sollten Sie im Idealfall sowieso ein CDN für diese verwenden, aber mein Punkt ist, dass einige Inhalte zwischengespeichert werden sollten.
Was ich hier am besten finde, anstatt den [OutputCache] überall zu verteilen, ist die Verwendung einer Klasse:
Alle Ihre Controller, für die Sie das Caching deaktivieren möchten, erben dann von diesem Controller.
Wenn Sie die Standardeinstellungen in der NoCacheController-Klasse überschreiben müssen, geben Sie einfach die Cache-Einstellungen Ihrer Aktionsmethode an. Die Einstellungen Ihrer Aktionsmethode haben Vorrang.
quelle
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
PartialViews in Ihrer Klasse nicht vorhanden sein können , wenn Sie sie auf Klassenebene verwenden.Möglicherweise möchten Sie das Browser-Caching für alle von Controllern gerenderten Seiten (z. B. HTML-Seiten) deaktivieren, das Caching für Ressourcen wie Skripte, Stylesheets und Bilder jedoch beibehalten . Wenn Sie die Bündelung und Minimierung von MVC4 + verwenden, sollten Sie die Standard-Cache-Dauer für Skripte und Stylesheets beibehalten (sehr lange Dauer, da der Cache aufgrund einer Änderung einer eindeutigen URL ungültig wird, nicht basierend auf der Zeit).
Fügen Sie in MVC4 + Folgendes hinzu, um das Browser-Caching auf allen Controllern zu deaktivieren, es jedoch für alle Elemente beizubehalten, die nicht von einem Controller bereitgestellt werden
FilterConfig.RegisterGlobalFilters
:Definieren Sie
DisableCache
wie folgt:quelle
Ich weiß, dass diese Antwort nicht zu 100% mit der Frage zusammenhängt, aber sie könnte jemandem helfen.
Wenn Sie den Browser-Cache für die gesamte ASP.NET MVC-Website deaktivieren möchten, dies jedoch nur VORÜBERGEHEND tun möchten, ist es besser, den Cache in Ihrem Browser zu deaktivieren.
quelle
Ich habe alle vorherigen Antworten implementiert und hatte immer noch eine Ansicht, die nicht richtig funktionierte.
Es stellte sich heraus, dass der Name der Ansicht, mit der ich das Problem hatte, "Zuletzt verwendet" war. Anscheinend hat dies den Internet Explorer-Browser verwirrt.
Nachdem ich den Ansichtsnamen (im Controller) in einen anderen Namen geändert hatte (ich habe 'Recent5' gewählt), begannen die oben genannten Lösungen zu funktionieren.
quelle
Sie können den folgenden Code in der Datei Global.asax ausprobieren.
quelle
Benutzeroberfläche
Hintergrund
quelle