我想缓存从HttpWebRequest获得的响应。我需要ResponseStream和标头。HttpRequestCachePolicy(HttpCacheAgeControl.MaxAge, TimeSpan.FromDays(1))在创建请求时使用似乎无效(由于某些原因,IsFromCache永远不会为真),而且由于它包含大量gzip压缩的数据流,我有点害怕手动缓存整个HttpWebResponse。将流存储在ASP.NET缓存中。
响应映射到这样的对象(简化):
public readonly Stream Response;
public readonly string Etag;
private MyObject(Stream response, string etag)
{
this.Response = response;
this.Etag = etag;
}
Run Code Online (Sandbox Code Playgroud)
由于对象还包含响应流,因此我在这里面临相同的问题。
我该如何缓存?
A Stream是管道,不是桶。如果需要存储它,则必须首先获取实际内容。例如,您可以将所有内容读入byte[]。例如:
using(var ms = new MemoryStream()) {
response.CopyTo(ms);
byte[] payload = ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
您可以轻松存储byte[]。然后,如果您想要Stream稍后使用,可以使用new MemoryStream(payload)。