使HttpRequest缓存工作

本文关键字:工作 缓存 HttpRequest | 更新日期: 2023-09-27 17:57:55

我想强制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;
    }
}

使HttpRequest缓存工作

最可能的原因是服务器的响应指定了某种"不缓存"标头。也就是说,它可能是Pragma: no-cache,所以即使您做出了努力,项目也不会被缓存。

可能的解决方法是将结果缓存在内存或磁盘上。。。