Я использую 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)