我想强制HttpRequest响应绝对无条件缓存。但有时它似乎不起作用。可能它会查看标题,但我不希望它这样做。例如,这个url有时不会缓存。这是一个代码:
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;
}
}
最可能的原因是服务器的响应指定了某种"不缓存"标头。也就是说,它可能是Pragma: no-cache
,所以即使您做出了努力,项目也不会被缓存。
可能的解决方法是将结果缓存在内存或磁盘上。。。