小编Nik*_*asN的帖子

System.Net.Http.HttpClient缓存行为

我正在使用NuGet的HttpClient 0.6.0.

我有以下C#代码:

var client = new HttpClient(new WebRequestHandler() {
    CachePolicy =
        new HttpRequestCachePolicy(HttpRequestCacheLevel.CacheIfAvailable)
});
client.GetAsync("http://myservice/asdf");
Run Code Online (Sandbox Code Playgroud)

该服务(这次是CouchDB)返回ETag值和状态代码200 OK.返回一个Cache-Control标头,其值为must-revalidate

更新,这是来自couchdb的响应头(取自visual studio调试器):

Server: CouchDB/1.1.1 (Erlang OTP/R14B04)
Etag: "1-27964df653cea4316d0acbab10fd9c04"
Date: Fri, 09 Dec 2011 11:56:07 GMT
Cache-Control: must-revalidate
Run Code Online (Sandbox Code Playgroud)

下次我执行完全相同的请求时,HttpClient会执行条件请求并返回304 Not Modified.哪个是对的.

但是,如果我使用具有相同CachePolicy的低级HttpWebRequest类,则第二次甚至不会发出请求.这就是我希望HttpClient也表现的方式.

它是必须重新验证的标头值还是为什么HttpClient表现不同?我想只做一个请求,然后在没有条件请求的情况下从缓存中获取其余的请求.

(另外,作为附注,在调试时,响应状态代码显示为200 OK,即使服务返回304 Not Modified)

c# wcf couchdb wcf-web-api

16
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×1

couchdb ×1

wcf ×1

wcf-web-api ×1