gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:06:28 28 4
gpt4 key购买 nike

新的 .NET 4.5 HttpClient 类对于发送 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;

期待“为什么你需要知道它是否来自缓存?” ...好吧,我碰巧想知道我是否只是与服务器通信,因为如果我这样做了,那么我将延长 session 保持事件计时器...但如果我只是从缓存中获取它,甚至没有转到服务器,我可能需要尽快发送 session 保持事件请求...为此服务器创建 session 至少需要几秒钟,我想避免它。

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

var resp = await client.GetAsync(uri);
resp.EnsureSuccessStatusCode();
//can look at status codes, headers etc here
return await resp.Content.ReadAsByteArrayAsync();

状态代码似乎是 200,无论它是否被缓存...... header 中有一些有趣的东西,但我不确定如何解释所有这些东西。

例如 resp.Headers.Date 看起来它的日期响应被缓存了,所以如果它在过去足够远(超过几秒钟?)可能会告诉我它是否被缓存或不。但就是不知道那种想法到底靠不靠谱……

最佳答案

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

enter image description here

关于c# - 确定缓存是否用于特定 HttpClient 请求的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16226053/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com