Comment faire pour effacer le cache de HttpWebRequest
Je suis en train d'élaborer à l'encontre d'un propriétaire de la bibliothèque et je rencontre quelques problèmes avec le cache de la HttpWebRequest
. La bibliothèque est à l'aide de code équivalent à celui ci-dessous pour en faire la demande:
var request = WebRequest.Create("http://example.com/") as HttpWebRequest;
request.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable);
La ressource externe n'empêche pas la mise en cache même si chaque réponse diffère. Donc je suis à la fin jusqu'à obtenir la même réponse à chaque fois.
Est-il un moyen pour effacer le contenu de la HttpWebRequest
cache? La bonne solution serait de fixer la source externe ou peut-être changer la stratégie de cache, mais il n'est ni possible - d'où la question.
Vider le cache pourrait avoir diverses répercussions, donc, de préférence, la solution serait d'invalider le cache par des ressources de base.
- Quelle a été la réponse à cette question? Bradley réponse est ce que je pensais être correct, mais de façon empirique que j'ai trouvé de compensation le cache IE (et à l'aide de Fiddler) de ne pas travailler.
- Je sais que cela a été demandé il y a quelques temps, j'ai pensé à cette question Supprimer le Cache de la Page en ASP.Net peut-être d'une certaine aide.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir la Politique de Cache à la demande de NoCacheNoStore à la HttpWebRequest.
HttpWebRequest
utiliseSystem.Net.Cache.RequestCache
pour la mise en cache. C'est une classe abstraite; la mise en œuvre effective dans le Microsoft common language runtime estMicrosoft.Win32.WinInetCache
qui, comme son nom l'indique, utilise le WinInet fonctions de mise en cache.C'est le même cache utilisé par Internet Explorer, de sorte que vous pouvez effacer le cache manuellement par l'utilisation d'IE, la boîte de dialogue Supprimer l'Historique de Navigation. (D'abord faire cela comme un test, assurez-vous de compensation de la WinInet cache de résoudre votre problème.)
En supposant que la compensation de la WinInet cache résout le problème, vous pouvez supprimer des fichiers par P/Invocation pour le DeleteUrlCacheEntry API WinInet:
CreateUrlCacheEntry
etDeleteUrlCacheEntry
doit être dans le même lieu.Je n'ai pas essayé, mais une solution pourrait être d'ajouter un arbitraire de la chaîne de requête de l'url demandée.
Ce querystring allait changer à chaque fois, peut-être à l'aide de DateTime.Maintenant, le sens de l'url serait différent à chaque fois. Chaque demande obtiendrait alors demandé soi-disant de nouveau.
Vous pouvez modifier la politique de cache: utiliser un proxy inverse http, et de supprimer/modifier pertinentes en-têtes http. C'est un hack, mais il pourrait fonctionner, et assez facilement. Je vous suggérons d'utiliser du serveur Apache httpd pour cette tâche (avec mod_proxy).
Ajouter la ligne suivante pour effacer le cache et lorsque le client web extrait les données: