Кажется, что кэширование HttpWebRequest в WP7 включено по умолчанию, как отключить его? Добавление случайного param url + "? param =" + RND.Next(10000) работает, но это довольно сложно, и я не уверен, что он сработает со всеми серверами.
WP7 HttpWebRequest без кеширования
Ответ 1
Для справки в будущем это работало для меня (я не мог использовать дополнительный параметр запроса из-за требований проекта):
HttpWebRequest request = HttpWebRequest.CreateHttp(url);
if (request.Headers == null)
{
request.Headers = new WebHeaderCollection();
}
request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();
Ответ 2
В случае HttpClient (Portable для Windows Phone) "Cache-Control": "no-cache" на стороне сервера работает только иногда. И я не могу добавить случайное значение строки запроса к вызову RESTful api.
Решение из @frno работает хорошо и выглядит как HttpClient:
client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow;
Спасибо.
Ответ 3
Как вы знаете это телефон, а не сервер (или прокси-сервер где-то между ними), который является кешированием?
Вы проверили это с помощью Fiddler2 (или эквивалента)?
Вы пытались настроить заголовки для отключения кэширования?
Что-то вроде:
myRequest = (HttpWebRequest)WebRequest.Create(myUri);
myRequest.Headers["Cache-Control"] = "no-cache";
myRequest.Headers["Pragma"] = "no-cache";
Ответ 4
Мы видели такое же поведение с Silverlight, размещенным в Chrome.
Мы добавляем "?nocache=" + DateTime.Now.Ticks.ToString()
к нашим URL-адресам запросов, если хотим предотвратить кеширование.
Ответ 5
Я нашел 3 способа
- Добавьте случайную строку запроса в конец вашего URI (подумайте Guid.NewGuid()), это позволит избежать кэширования на клиенте, поскольку строка запроса будет отличаться каждый раз
string uri = " http://host.com/path?cache=" + Guid.NewGuid(). ToString();
- Не указывать кеш в заголовке OutgoingResponse в вашей службе WCF:
var __request = (HttpWebRequest)WebRequest.Create(url.ToString()); if (__request.Headers == null) __request.Headers = new WebHeaderCollection(); __request.Headers.Add("Cache-Control", "no-cache");
- разметьте вашу службу с атрибутом AspNetCacheProfile:
[AspNetCacheProfile("GetContent")] public ResultABC GetContent(string abc) { __request = (HttpWebRequest)WebRequest.Create(abc); return __request; }
И обновите свой web.config
<system.web> <caching> <outputCache enableOutputCache="true" /> <outputCacheSettings> <outputCacheProfiles > <add name="GetContent" duration="0" noStore="true" location="Client" varyByParam="" enabled="true"/> </outputCacheProfiles> </outputCacheSettings> </caching> ... </system.web>
Ответ 6
Добавление случайного числа неплохое, и оно будет работать. Я использовал Time (в ajax-вызове). Был помещен в URL как папка.
Ответ 7
Да возможно...:) Я провожу неделю экспериментов, и ответ на самом деле прост:
HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl);
_webRequest.AllowReadStreamBuffering = false
_webRequest.BeginGetResponse(_onDownload,
userState);