I want to force HttpRequest response to be cached absolutely without any conditions. But it seems like sometimes it doesn't work. May be it looks at headers but I don't want it to. For an example this url is not cached sometimes. Here is a code:
public static class HttpRequestHelper
{
public const string ContentTypeForm = "application/x-www-form-urlencoded";
public static HttpWebRequest CreateRequest(Uri uri)
{
HttpWebRequest request = WebRequest.CreateHttp(uri);
request.Proxy = null;
return request;
}
public enum CacheMode
{
None = 0,
Hourly,
Max,
}
public static string Request(Uri uri, CacheMode cache = CacheMode.None)
{
HttpWebRequest request = CreateRequest(uri);
if (cache != CacheMode.None)
request.CachePolicy = new HttpRequestCachePolicy(HttpCacheAgeControl.MaxStale,
cache == CacheMode.Hourly ? TimeSpan.FromHours(1) : TimeSpan.FromDays(365));
return GetContent(request);
}
public static HttpWebResponse GetResponse(HttpWebRequest request)
{
Contract.Requires(request != null);
Debug.WriteLine("Request: " + request.RequestUri);
var response = request.GetResponse() as HttpWebResponse;
return response;
}
public static string GetContent(WebRequest request)
{
Contract.Requires(request != null);
string data = "";
using (var response = (HttpWebResponse)request.GetResponse())
{
Stream responseStream = response.GetResponseStream();
if (responseStream == null) return data;
using (var reader = new StreamReader(responseStream))
{
data = reader.ReadToEnd();
}
}
return data;
}
}
Most likely reason is server's response specifies some sort of "don't cache" headers. Ie it could be Pragma: no-cache
- so item will not be cached despite your efforts.
Possible workaround is to cache results yourself in-memory or on disk...
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.