Monotouch - iphone HttpWebRequest отключить кеширование? - PullRequest
2 голосов
/ 13 февраля 2011

Я использую monotouch для создания заявителя iphone, который вызвал неуверенную страницу, которая возвращает JSON.

Странно это ... но когда я использую HttpWebRequest, вывод, который я получаю, кэшируется из более раннего запроса.

Я рассчитал время с помощью секундомера, и мне пришлось ждать две минуты , прежде чем я получу новую версию страницы до этой точки, каждый раз, когда я вызываю HttpWebRequest, я получаю выходные данные, которые были кэшированы.

Даже если я закрою приложение и перезагрузлю его, выходные данные для этого двухминутного окна будут одинаковыми.

Это происходит как на симуляторе, так и на телефоне.

Я только что попытался добавить политику кеширования, но не радуюсь - я все еще получаю кэширование всех ответов в течение 2 минут.

Вот мой последний код:

Uri address = new Uri(url);
HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;

System.Net.Cache.RequestCachePolicy c = new System.Net.Cache.RequestCachePolicy();
c.Level = RequestCacheLevel.NoCacheNoStore;
request.CachePolicy  = c;
request.Timeout = Settings.RequestTimeout;
HttpWebResponse response = request.GetResponse();

У любого есть идеи

Ответы [ 3 ]

1 голос
/ 05 августа 2011

Просто к сведению, но реализация Mono HttpWebRequest не выполняет никакого кеширования (пока). Это может быть реализовано в будущем, но по состоянию на 2.10.3 это не так.

0 голосов
/ 24 октября 2012

Вы можете попробовать использовать объекты и методы, связанные с iOS. Просмотр кэширования определенно реализован при использовании NSUrlCache в MonoTouch, и вы можете обойти его с правильным перечислением NSUrlRequestCachePolicy. Вот как я это сделал, когда хотел избежать попадания в кеш:

NSUrl url = new NSUrl (url);
NSUrlRequest request = new NSUrlRequest (url, 
                                 NSUrlRequestCachePolicy.ReloadIgnoringCacheData, 
                                 0.0);

//set a delegate to handle the request callback, subclass this yourself
_webView.Delegate = new UIWebViewDelegate();
_webView.LoadRequest (request);

Надеюсь, это поможет.

0 голосов
/ 13 февраля 2011

Вы пробовали запрос на другой адрес? Может ли это быть кэшированием на стороне сервера ответов в течение двух минут?

...