2009-03-19 5 views
1

J'utilise soit WebClient ou HttpRequest/response pour faire des appels http pour les images. Je ne suis pas sûr de la façon dont la mise en cache fonctionne spécifiquement pour les navigateurs, mais existe-t-il un moyen d'activer WebClient ou WebHttpRequest pour utiliser le cache de "fichiers Internet temporaires" des systèmes que le navigateur utilise?HttpRequests .NET en utilisant le système de cache de Windows

Ou, dois-je écrire mon propre disque cacher?

Répondre

0

Si vous effectuez des requêtes HTTP et que vous voulez que vos demandes d'accès à un cache local si la ressource demandée a déjà été demandé, vous devrez écrire votre propre cache.

Il existe de nombreuses implémentations potentielles. Cela dépend vraiment du nombre de ressources différentes que vous prévoyez de demander, et à quelle fréquence.

+0

Merci. Je viens juste d'écrire le mien. Il n'a fallu que 5 minutes pour obtenir une API dont j'étais content – CVertex

+0

@Chris: existe-t-il de la documentation à ce sujet? Je ne suis pas convaincu que ce soit vrai. – AnthonyWJones

+0

Ni moi, et il ya le HttpRuntime.Cache au pire – annakata

4

Vous pouvez charger le WebRequest d'utiliser le cache du système en définissant la propriété CachePolicy.

code suivant (tiré de MSDN) met en cache les demandes d'un jour. Le cache est stocké dans le dossier des fichiers Internet temporaires de l'utilisateur actuel (au moins sur Windows XP).

// Create a policy that allows items in the cache 
// to be used if they have been cached one day or less. 
HttpRequestCachePolicy requestPolicy = 
    new HttpRequestCachePolicy (HttpCacheAgeControl.MaxAge, 
    TimeSpan.FromDays(1)); 

WebRequest request = WebRequest.Create (resource); 

// Set the policy for this request only. 
request.CachePolicy = requestPolicy; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

// Determine whether the response was retrieved from the cache. 
Console.WriteLine ("The response was retrieved from the cache : {0}.", 
response.IsFromCache); 

Stream s = response.GetResponseStream(); 
// do something with the response stream 
s.Close(); 
response.Close(); 
Questions connexes