我想缓存从HttpWebRequest获得的响应。我需要ResponseStream和标头。在创建请求时使用HttpRequestCachePolicy(HttpCacheAgeControl.MaxAge, TimeSpan.FromDays(1))
似乎不起作用(IsFromCache由于某种原因从来都不是真的),而且我有点害怕手动缓存整个HttpWebResponse,因为它包含一个gzip压缩数据流,而我关于在ASP.NET缓存中存储流的感觉很糟糕。
响应映射到这样的对象(简化):
public readonly Stream Response;
public readonly string Etag;
private MyObject(Stream response, string etag)
{
this.Response = response;
this.Etag = etag;
}
由于该对象还包含响应流,因此我面临同样的问题。
如何缓存此内容?
答案 0 :(得分:4)
Stream
是管道,而非存储桶。如果您需要存储它,您必须首先获得实际内容。例如,您可以将其全部读入byte[]
。例如:
using(var ms = new MemoryStream()) {
response.CopyTo(ms);
byte[] payload = ms.ToArray();
}
您可以轻松存储byte[]
。然后,如果您希望稍后Stream
,则可以使用new MemoryStream(payload)
。
答案 1 :(得分:2)
您是否可以创建一个自定义类,其中包含用于存储数据的字节数组,另一个字段包含用于标头的HttpWebRequest.Headers?然后缓存那个。