WP7 HttpWebRequest без кеширования - PullRequest
18 голосов
/ 16 декабря 2010

Похоже, что кеширование HttpWebRequest в WP7 включено по умолчанию, как его отключить? Добавление случайного param url + "? param =" + RND.Next (10000) работает, но это довольно сложно, и я не уверен, будет ли это работать со всеми серверами.

Ответы [ 7 ]

19 голосов
/ 09 февраля 2012

Для дальнейшего использования, это работало для меня (я не мог использовать дополнительный параметр запроса из-за требований проекта):

        HttpWebRequest request = HttpWebRequest.CreateHttp(url);
        if (request.Headers == null)
        {
            request.Headers = new WebHeaderCollection();
        }
        request.Headers[HttpRequestHeader.IfModifiedSince] = DateTime.UtcNow.ToString();
11 голосов
/ 26 июля 2013

В случае HttpClient (Portable для Windows Phone) «Cache-Control»: «no-cache» на стороне сервера работает только иногда.И я не могу добавить случайное значение строки запроса к вызову API RESTful.

Решение от @frno работает хорошо и похоже на HttpClient:

client.DefaultRequestHeaders.IfModifiedSince = DateTime.UtcNow;

Спасибо.

6 голосов
/ 16 декабря 2010

Откуда вы знаете, что кешируется телефон, а не сервер (или прокси-сервер где-то посередине)?
Вы проверяли это с помощью Fiddler2 (или его эквивалента)?

Пробовали ли вы устанавливать заголовкиотключить кеширование?
Что-то вроде:

myRequest = (HttpWebRequest)WebRequest.Create(myUri);

myRequest.Headers["Cache-Control"] = "no-cache";
myRequest.Headers["Pragma"] = "no-cache";
1 голос
/ 03 октября 2014

Я нашел 3 способа

  1. Добавить случайную строку запроса в конец вашего 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>
1 голос
/ 23 июля 2012

Мы видели такое же поведение с Silverlight, размещенным в Chrome.

Мы добавляем "?nocache=" + DateTime.Now.Ticks.ToString() в URL-адреса наших запросов, если мы хотим предотвратить кэширование.

0 голосов
/ 17 мая 2011

Да возможно ... :) Я провожу одну неделю эксперимента, и ответ очень прост:

      HttpWebRequest _webRequest = WebRequest.CreateHttp(_currentUrl);

     _webRequest.AllowReadStreamBuffering = false
 _webRequest.BeginGetResponse(_onDownload,
 userState);
0 голосов
/ 16 декабря 2010

Добавление случайного числа не плохо, и это будет работать. Я использовал Время (в вызове ajax). Был помещен в URL как папка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...