Je recherche une méthode pour désactiver le cache du navigateur pour un site Web ASP.NET MVC complet
J'ai trouvé la méthode suivante:
Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);
Response.Cache.SetNoStore();
Et aussi une méthode meta tag (cela ne fonctionnera pas pour moi, car certaines actions MVC envoient du HTML / JSON partiel via Ajax, sans head, meta tag).
<meta http-equiv="PRAGMA" content="NO-CACHE">
Mais je cherche une méthode simple pour désactiver le cache du navigateur pour un site Web entier.
Réponses:
Toutes les demandes sont d'abord acheminées via default.aspx - donc en supposant que vous pouvez simplement insérer du code derrière.
la source
Créez une classe qui hérite de IActionFilter.
Mettez ensuite les attributs là où vous en avez besoin ...
la source
if (filterContext.IsChildAction) return;
en haut - cela empêchera l'action extérieure d'être «non mise en cache» si elle appelle une action enfant décorée avec unNoCache
attribut. En d'autres termes, l'NoCache
attribut ne fuit pas vers d'autres actions s'il exécute des actions enfants. En outre, le nom de classe doit êtreNoCacheAttribute
conforme à la convention de dénomination généralement acceptée pour les attributs.Au lieu de lancer le vôtre, utilisez simplement ce qui vous est fourni.
Comme mentionné précédemment, ne désactivez pas la mise en cache pour tout. Par exemple, les scripts jQuery largement utilisés dans ASP.NET MVC doivent être mis en cache. En fait, idéalement, vous devriez utiliser un CDN pour ceux-ci de toute façon, mais mon point est que certains contenus doivent être mis en cache.
Ce que je trouve fonctionne mieux ici que d'arroser le [OutputCache] partout, c'est d'utiliser une classe:
Tous vos contrôleurs pour lesquels vous souhaitez désactiver la mise en cache, puis héritez de ce contrôleur.
Si vous devez remplacer les valeurs par défaut de la classe NoCacheController, spécifiez simplement les paramètres de cache de votre méthode d'action et les paramètres de votre méthode d'action auront la priorité.
la source
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
au niveau de la classe, vous ne pouvez pas avoir des vues partielles dans votre classe.Vous pouvez désactiver la mise en cache du navigateur pour toutes les pages rendues par les contrôleurs (c'est-à-dire les pages HTML), mais garder la mise en cache en place pour les ressources telles que les scripts, les feuilles de style et les images . Si vous utilisez le regroupement et la minification MVC4 +, vous souhaiterez conserver les durées de cache par défaut pour les scripts et les feuilles de style (très longues durées, car le cache est invalidé en fonction d'une modification d'une URL unique, et non en fonction du temps).
Dans MVC4 +, pour désactiver la mise en cache du navigateur sur tous les contrôleurs, mais le conserver pour tout ce qui n'est pas servi par un contrôleur, ajoutez ceci à
FilterConfig.RegisterGlobalFilters
:Définissez
DisableCache
comme suit:la source
Je sais que cette réponse n'est pas liée à 100% à la question, mais elle pourrait aider quelqu'un.
Si vous souhaitez désactiver le cache du navigateur pour l' ensemble du site Web ASP.NET MVC , mais que vous ne souhaitez le faire que TEMPORAIREMENT, il est préférable de désactiver le cache dans votre navigateur.
la source
J'ai implémenté toutes les réponses précédentes et j'avais toujours une vue qui ne fonctionnait pas correctement.
Il s'est avéré que le nom de la vue avec laquelle je rencontrais le problème s'appelait «Récent». Apparemment, cela a confondu le navigateur Internet Explorer.
Après avoir changé le nom de la vue (dans le contrôleur) en un nom différent (j'ai choisi «récent5»), les solutions ci-dessus ont commencé à fonctionner.
la source
Vous pouvez essayer le code ci-dessous dans le fichier Global.asax.
la source
UI
Contexte
la source