C# 使HttpRequest缓存工作

C# 使HttpRequest缓存工作,c#,caching,httprequest,C#,Caching,Httprequest,我想强制HttpRequest响应在没有任何条件的情况下被绝对缓存。但有时它似乎不起作用。也许它会看页眉,但我不想看。例如,有时不缓存。下面是一个代码: public static class HttpRequestHelper { public const string ContentTypeForm = "application/x-www-form-urlencoded"; public static HttpWebRequest CreateRequest(Uri ur

我想强制HttpRequest响应在没有任何条件的情况下被绝对缓存。但有时它似乎不起作用。也许它会看页眉,但我不想看。例如,有时不缓存。下面是一个代码:

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
-因此,尽管您做出了努力,但不会缓存该项


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

另一个url示例您能提供一些现成的解决方案吗?我不想实现所有这些东西-缓存数据库文件和操作,管理内存中要保存的内容等等。实现了它。没有那么难。