C# 方法来确定缓存是否用于特定的HttpClient请求

C# 方法来确定缓存是否用于特定的HttpClient请求,c#,caching,httpclient,C#,Caching,Httpclient,新的.NET4.5HttpClient类对于发送web请求非常方便,因此我尝试使用它来代替旧的HttpWebRequest和相关类 我可以让它做我以前做的任何事情,包括解压缩、缓存 但我如何知道缓存是否满足了已完成的请求 这在以前是可能的: using (var resp = request.GetResponse()) using (var rs = resp.GetResponseStream()) { if (!resp.IsFromCache) { //d

新的.NET4.5HttpClient类对于发送web请求非常方便,因此我尝试使用它来代替旧的HttpWebRequest和相关类

我可以让它做我以前做的任何事情,包括解压缩、缓存

但我如何知道缓存是否满足了已完成的请求

这在以前是可能的:

using (var resp = request.GetResponse())
using (var rs = resp.GetResponseStream())
{
    if (!resp.IsFromCache)
    {
        //do something
    }
}
我在哪里可以加支票

HttpClient client = new HttpClient(
            new WebRequestHandler
            {
                AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
                CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.CacheIfAvailable),
                UseDefaultCredentials = true,
                PreAuthenticate = true
            });
var data = await client.GetByteArrayAsync(uri);
//did that come from the cache?
return data;
预期“为什么您需要知道它是否来自缓存?”。。。我碰巧想知道我是否只是和服务器通信,因为如果我这样做了,我将扩展一个会话保持活动计时器。。。但是,如果我只是从缓存中获取,甚至没有进入服务器,我可能需要更快地发送会话保持活动请求。。。为此服务器创建会话至少需要几秒钟,我希望避免这种情况

如果我在HttpClient上使用更多的零碎方法,则有更多的空间来调查响应并查找状态代码和标题:

var resp = await client.GetAsync(uri);
resp.EnsureSuccessStatusCode();
//can look at status codes, headers etc here
return await resp.Content.ReadAsByteArrayAsync();
无论是否缓存,状态代码都显示为200。。。标题中有一些有趣的东西,但我不确定如何解释它们


例如,
resp.Headers.Date
看起来像是缓存了响应的日期,因此如果它在过去足够远(超过几秒钟),那么可能会告诉我它是否缓存。但我只是不知道这种想法有多可靠…

我想也许你可以检查一下。如果是304,则来自缓存,如果是200,则为新副本

您可以看到所有枚举(和数字)。

显示它来自缓存。左侧是第一个(未缓存)请求,右侧是第二个(缓存)请求:


我已经沿着这些路线做了一些挖掘。。。事实上,当它从缓存中返回时,我会返回一个200状态码(甚至不与服务器联系)。。。标题中有一些与缓存相关的内容,我可以尝试解析出来,但不确定这是否可靠。