Поведение кэширования System.Net.Http.HttpClient

Я использую HttpClient 0.6.0 из NuGet.

У меня есть следующий C # код:

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

Служба (на этот раз 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

В следующий раз, когда я сделаю точно такой же запрос, HttpClient выполнит условный запрос и вернет 304 Not Modified. Это правильно.

Однако, если я использую низкоуровневый класс HttpWebRequest с тот же CachePolicy, запрос даже не выполняется во второй раз. Я бы хотел, чтобы HttpClient также вел себя таким же образом.

Это значение заголовка, которое необходимо повторно проверить, или почему HttpClient ведет себя иначе? Я хотел бы сделать только один запрос, а затем получить остаток из кеша без условного запроса ..

(Кроме того, в качестве sid электронное примечание: при отладке код состояния ответа отображается как 200 OK, даже если служба возвращает 304 Not Modified)

16
задан NiklasN 9 December 2011 в 13:17
поделиться