5

我想缓存从 HttpWebRequest 获得的响应。我需要 ResponseStream 和标头。在创建请求时使用HttpRequestCachePolicy(HttpCacheAgeControl.MaxAge, TimeSpan.FromDays(1))似乎不起作用(由于某种原因,IsFromCache 永远不会是真的),而且我有点害怕手动缓存整个 HttpWebResponse,因为它包含一个压缩数据流,我有一种不好的感觉在 ASP.NET 缓存中存储流。

响应被映射到这样的对象(简化):

public readonly Stream Response;
public readonly string Etag;

private MyObject(Stream response, string etag)
{
    this.Response = response;
    this.Etag = etag;
}

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

我如何缓存这个?

4

2 回答 2

7

AStream管道,不是。如果需要存储,必须先获取实际内容。例如,您可以将其全部读入byte[]. 例如:

using(var ms = new MemoryStream()) {
    response.CopyTo(ms);
    byte[] payload = ms.ToArray();
}

您可以存储byte[]琐碎。然后,如果您想要Stream稍后,您可以使用new MemoryStream(payload).

于 2012-10-02T13:50:39.633 回答
2

您能否创建一个自定义类,其中包含一个用于存储数据的字节数组和另一个带有 HttpWebRequest.Headers 的字段作为标题?然后缓存它。

于 2012-10-02T13:50:25.740 回答