将流存储在缓存中

Jan*_*mer 4 c# caching

我想缓存从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)

由于对象还包含响应流,因此我在这里面临相同的问题。

我该如何缓存?

Mar*_*ell 5

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)