Подтвердить что ты не робот

WP7 HttpWebRequest без кеширования

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

4b9b3361

Ответ 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();

  1. Не указывать кеш в заголовке OutgoingResponse в вашей службе WCF:
var __request = (HttpWebRequest)WebRequest.Create(url.ToString());
if (__request.Headers == null)
    __request.Headers = new WebHeaderCollection();
__request.Headers.Add("Cache-Control", "no-cache");
  1. разметьте вашу службу с атрибутом 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);