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;
            }
        }
Example #4
0
        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;
            }
        }
Example #5
0
        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);
            }
        }