public async Task AddEntryAsync(CacheEntry entry, HttpResponseMessage response) { CacheEntryContainer cacheEntryContainer = GetOrCreateContainer(entry.Key); lock (syncRoot) { cacheEntryContainer.Entries.Add(entry); _responseCache[entry.VariantId] = response; } }
public static CacheQueryResult ReturnStored(CacheEntry cacheEntry, HttpResponseMessage response) { HttpCache.UpdateAgeHeader(response); return new CacheQueryResult() { Status = CacheStatus.ReturnStored, SelectedEntry = cacheEntry, SelectedResponse = response }; }
public async Task UpdateEntryAsync(CacheEntry entry, HttpResponseMessage response) { CacheEntryContainer cacheEntryContainer = GetOrCreateContainer(entry.Key); lock (syncRoot) { var oldentry = cacheEntryContainer.Entries.First(e => e.VariantId == entry.VariantId); cacheEntryContainer.Entries.Remove(oldentry); cacheEntryContainer.Entries.Add(entry); _responseCache[entry.VariantId] = response; } }
private static void UpdateCacheEntry(HttpResponseMessage updatedResponse, CacheEntry entry) { var newExpires = HttpCache.GetExpireDate(updatedResponse); if (newExpires > entry.Expires) { entry.Expires = newExpires; } entry.Etag = updatedResponse.Headers.ETag != null ? updatedResponse.Headers.ETag.Tag : null; if (updatedResponse.Content != null) { entry.LastModified = updatedResponse.Content.Headers.LastModified; } }
public async Task StoreResponseAsync(HttpResponseMessage response) { var primaryCacheKey = new CacheKey(response.RequestMessage.RequestUri, response.RequestMessage.Method); CacheEntry selectedEntry = null; IEnumerable<CacheEntry> cacheEntries = await _contentStore.GetEntriesAsync(primaryCacheKey).ConfigureAwait(false); if (cacheEntries != null) { selectedEntry = MatchVariant(response.RequestMessage, cacheEntries); } if (selectedEntry != null) { UpdateCacheEntry(response, selectedEntry); await _contentStore.UpdateEntryAsync(selectedEntry, response).ConfigureAwait(false); } else { selectedEntry = new CacheEntry(primaryCacheKey, response); UpdateCacheEntry(response, selectedEntry); await _contentStore.AddEntryAsync(selectedEntry, response).ConfigureAwait(false); } }