Pas de cache avec HttpClient dans Windows Phone 8
J'ai lu que pour désactiver la mise en cache en utilisant les méthodes get et post dans HttpClient
, j'ai besoin d'utiliser un WebRequestHandler
que mon HttpClient
's HttpClientHandler
, et le changement de sa politique de cache. Cependant, WebRequestHandler
n'est pas dans System.Net.Http.dll mais plutôt dans l'System.Net.Http.WebRequest.dll, j'ai donc essayé d'ajouter l' .dll dans le projet en tant que référence. J'ai eu un message d'erreur:
Microsoft Visual Studio
Une référence à une version supérieure ou incompatible assemblée ne peut pas être
ajouté au projet.
De nouveau, après un peu de recherche, j'en ai conclu que l' .dll fichier a été bloqué parce qu'il a été téléchargé à partir d'une autre source. Pour le débloquer, je suis allé essayer la solution ici. Toutefois, il ne fonctionne pas non plus et je suis toujours le même message d'erreur lorsque j'essaie d'ajouter le .dll en tant que référence.
Tout ce que je veux faire est de désactiver la mise en cache à l'aide de mon HttpClient, suis-je en train de faire quelque chose de mal ici? Je suis ouverte à tout type de conseils ou d'aide.
Mon système est Windows 8.1 et je suis à l'aide de Visual Studio 2013. Le projet sur lequel je travail sur un Windows Phone 8 application. Le répertoire de .dll je suis en train de référence est "C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Net.Http.WebRequest.dll". Je vous remercie à l'avance.
OriginalL'auteur halileohalilei | 2014-01-15
Vous devez vous connecter pour publier un commentaire.
Il n'est pas possible de faire référence régulière .NET assemblées dans un Windows Phone 8 projet. Vous ne pouvez utiliser le .NET API pour Windows Phone. C'est un sous-ensemble de l'ordinaire .NET. Voir http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207211%28v=vs.105%29.aspx pour plus d'info.
La mise en cache par défaut de HttpClient (et HttpWebRequest) peut être contourné en ajoutant une valeur à la chaîne de requête. Par exemple, un guid.
Une meilleure solution, comme l'a souligné dans le commentaire ci-dessus, est de définir le "if-Modified-Since" en-tête. HttpWebRequest a construit en:
Mais vous pouvez ajouter l'en-tête manuellement à l'aide d'un HttpClient, je suppose.
Notez que vous devez utiliser
DateTime.UtcNow.ToString("r");
de sorte que le timestamp est correctement mis en forme conformément à la RFC.Vous gars sauver ma vie, j'ai cogner ma tête contre le mur depuis si longtemps maintenant! Pire, c'est que cette auto la mise en cache est traitée uniquement sur WP Application, pas sur App Universelle, wtf?!
Cette solution peut être un hack spécifique à Windows Phone. J'ai essayé d'utiliser cela dans un Xamarin application (également pour Windows Phone) et il a provoqué le serveur retourne toujours une réponse " 304 not Modified, ce qui est logique, puisque la if-Modified-since "maintenant" est rarement vrai si il ya toute sorte de mise en cache sur le serveur. Ce qui a fini par travailler pour moi a été de client.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue() { NoCache = true };
OriginalL'auteur denniebee
Si vous utilisez
Windows.Web.Http.HttpClient
, le propre moyen de corriger ce problème côté client est:De cette façon, vous éviter de remplir l'app cache, les fichiers temporaires lors de l'utilisation aléatoire de chaînes de requête. Chaque réponse est stockée dans le cache.
Bien sûr, il est toujours recommandé pour corriger le problème par le côté serveur. Ajouter l'en-tête suivant, et vous n'aurez pas besoin de s'inquiéter à propos de cache sur chaque client:
Réponse complète:
OriginalL'auteur kiewic
J'ai trouvé 3 façons
Et mise à jour de votre site web.config
OriginalL'auteur R00We
J'ai écrit un
HttpMessageHandler
basé sur la solution ci-dessus:Utilisation
new HttpClient(new BypassCacheHttpRequestHandler(), true);
pour initialiser votreHttpClient
, alors vous pouvez toujours contourner le cache.OriginalL'auteur Simon Chan
Ce pour windows phone pour obtenir de nouvelles données au lieu de la capture de données
une autre alternative est définie
dans la page serveur Page_Load si u obtenir des données de page aspx
OriginalL'auteur user1487912