Existe-t-il un moyen de désactiver la mise en cache d'un seul fichier javascript dans mon applicaiton ASP.NET sans désactiver la mise en cache des autres fichiers dans l'application?
Il fonctionne sur IIS 7 dans Azure, il me semble donc que mes seules options de contrôle sont dans les balises du serveur Web.
J'utilise actuellement la configuration folowwing, mais cela désactive le cache sur tous les fichiers.
<modules runAllManagedModulesForAllRequests="true"/>
<staticContent>
<clientCache cacheControlMode="DisableCache"/>
</staticContent>
</system.webServer>
Je veux juste désactiver le cache d'un seul fichier javascript qui change assez souvent.
C'est possible?
Je suis juste tombé sur cette question; vous pouvez utiliser ce qui suit pour désactiver le cache sur un fichier spécifique:
<configuration>
<location path="path/to/the/file">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
</location>
</configuration>
(Notez que le chemin est relatif au fichier web.config)
Alternativement, placez le fichier unique dans un répertoire seul et donnez à ce répertoire son propre web.config qui désactive la mise en cache pour tout ce qu'il contient;
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Cache-Control" value="no-cache" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
[Tous deux testés sur IIS7.5 sur Windows 7, mais vous devrez confirmer que cela fonctionne bien sur Azure]
Il semble que la réponse ci-dessus manque une balise "profiles"
<caching>
<profiles>
<add extension=".js" kernelCachePolicy="DontCache" policy="DontCache"/>
</profiles>
</caching>
Vous allez vouloir regarder la classe System.WebServer/Caching, où vous pouvez appliquer un profil de mise en cache à des extensions particulières. Cela vous permettra au moins de le contrôler pour tous les fichiers Javascript se terminant par le .js.
<system.webServer>
...
<caching>
<add extension=".js" policy="DontCache" kernelCachePolicy="DontCache" />
</caching>
</system.webServer>
Cela devrait désactiver la mise en cache .js sur la mise en cache du processus et du noyau à partir du cloud.
Je pense que vous pouvez créer ce web.config dans un dossier qui contient uniquement votre fichier et il désactivera la mise en cache pour .js uniquement à ce niveau de dossier. Honnêtement, je n'ai pas essayé cela moi-même, alors juste une suggestion que vous pourriez tester.
Au-delà de cela, jetez un œil à la documentation de IIS relative à la configuration de la mise en cache:
/ Caching: http://www.iis.net/ConfigReference/system.webServer/caching
/ Mise en cache/Profils: http://www.iis.net/ConfigReference/system.webServer/caching/profiles
/ Caching/Profiles/Add: http://www.iis.net/ConfigReference/system.webServer/caching/profiles/add
J'espère que, en plus de quelques recherches sur ces balises de configuration, cela vous aidera.
Sinon, je vous recommande de chercher à implémenter un module HTTP personnalisé que vous pouvez insérer dans le canal de demande IIS, qui peut filtrer votre contrôle de mise en cache jusqu'à ce fichier particulier
** pour ce que cela vaut, c'est juste un comportement IIS et ne sera pas différent dans ou hors d'Azure, vous pouvez donc facilement tester ce local sans vous soucier du tissu Dev ou des tests Azure.
Vous pouvez désactiver la mise en cache de sortie au niveau du dossier en supprimant une extension au niveau du dossier en incluant un web.config dans ce dossier comme celui-ci
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<caching>
<profiles>
<remove extension=".js" />
</profiles>
</caching>
</system.webServer>
</configuration>
maintenant, ce dossier n'aura pas la mise en cache de sortie activée pour les fichiers se terminant par .js
Ouvrez le panneau IIS.
Ouvrez l'application associée à partir des sites, puis accédez au dossier contenant un fichier particulier.
À partir du volet droit, passez à l'affichage du contenu
Sélectionnez votre fichier souhaité
Maintenant, faites un clic droit sur le fichier pour choisir "Passer à la vue des fonctionnalités".
De là, choisissez En-têtes de réponse HTTP, cliquez sur "Ajouter" pour ajouter un nouvel en-tête, Ajoutez un en-tête "Cache-Control" avec une valeur "no-cache".
Oui, c'est possible, vous pouvez le faire dans le fichier de configuration:
(Voir https://stackoverflow.com/a/4821328/2247494 )
<configuration>
<location path="cache.manifest">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
</location>
</configuration>