private async Task<CacheContent> CloneAsync(CacheContent cacheContent)
        {
            var newResponse = new HttpResponseMessage(cacheContent.Response.StatusCode);
            var ms = new MemoryStream();

            foreach (var v in cacheContent.Response.Headers) newResponse.Headers.TryAddWithoutValidation(v.Key, v.Value);


            if (cacheContent.Response.Content != null)
            {
                await cacheContent.Response.Content.CopyToAsync(ms).ConfigureAwait(false);
                ms.Position = 0;
                newResponse.Content = new StreamContent(ms);
                foreach (var v in cacheContent.Response.Content.Headers) newResponse.Content.Headers.TryAddWithoutValidation(v.Key, v.Value);
            }


            var newContent = new CacheContent()
            {
                CacheEntry = cacheContent.CacheEntry,
                Key = cacheContent.Key,
                Expires = cacheContent.Expires,
                HasValidator = cacheContent.HasValidator,
                CacheControl = cacheContent.CacheControl,
                Response = newResponse
            };

            return newContent;
        }
        public async Task UpdateEntryAsync(CacheContent content)
        {
            CacheEntry entry = content.CacheEntry;

            InMemoryCacheEntry inMemoryCacheEntry = null;

            if (!_responseCache.ContainsKey(entry.Key))
            {
                inMemoryCacheEntry = new InMemoryCacheEntry(entry);
                lock (syncRoot)
                {
                    _responseCache[entry.Key] = inMemoryCacheEntry;
                }
            }
            else
            {
                inMemoryCacheEntry = _responseCache[entry.Key];
            }

            var newContent = await CloneAsync(content);
            lock (syncRoot)
            {
                inMemoryCacheEntry.Responses[content.Key] = newContent;
            }
        }
        public async Task UpdateEntryAsync(CacheContent content)
        {
            CacheEntry entry = content.CacheEntry;

            InMemoryCacheEntry inMemoryCacheEntry = null;

            if (!_responseCache.ContainsKey(entry.Key))
            {
                inMemoryCacheEntry = new InMemoryCacheEntry(entry);
                lock (syncRoot)
                {
                    _responseCache[entry.Key] = inMemoryCacheEntry;
                }
            }
            else
            {
                inMemoryCacheEntry = _responseCache[entry.Key];
            }

            var newContent = await CloneAsync(content);

            lock (syncRoot)
            {
                inMemoryCacheEntry.Responses[content.Key] = newContent;
            }
        }
 public static CacheQueryResult ReturnStored(CacheContent cacheContent)
 {
     return new CacheQueryResult()
     {
         Status = CacheStatus.ReturnStored,
         SelectedVariant = cacheContent
     };
 }
 public static CacheQueryResult Revalidate(CacheContent cacheContent)
 {
     return new CacheQueryResult()
     {
         Status = CacheStatus.Revalidate,
         SelectedVariant = cacheContent
     };
 }
 public static CacheQueryResult ReturnStored(CacheContent cacheContent)
 {
     return(new CacheQueryResult()
     {
         Status = CacheStatus.ReturnStored,
         SelectedVariant = cacheContent
     });
 }
 public static CacheQueryResult Revalidate(CacheContent cacheContent)
 {
     return(new CacheQueryResult()
     {
         Status = CacheStatus.Revalidate,
         SelectedVariant = cacheContent
     });
 }
        private async Task <CacheContent> CloneAsync(CacheContent cacheContent)
        {
            var newResponse = new HttpResponseMessage(cacheContent.Response.StatusCode);
            var ms          = new MemoryStream();

            foreach (var v in cacheContent.Response.Headers)
            {
                newResponse.Headers.TryAddWithoutValidation(v.Key, v.Value);
            }


            if (cacheContent.Response.Content != null)
            {
                await cacheContent.Response.Content.CopyToAsync(ms).ConfigureAwait(false);

                ms.Position         = 0;
                newResponse.Content = new StreamContent(ms);
                foreach (var v in cacheContent.Response.Content.Headers)
                {
                    newResponse.Content.Headers.TryAddWithoutValidation(v.Key, v.Value);
                }
            }


            var newContent = new CacheContent()
            {
                CacheEntry   = cacheContent.CacheEntry,
                Key          = cacheContent.Key,
                Expires      = cacheContent.Expires,
                HasValidator = cacheContent.HasValidator,
                CacheControl = cacheContent.CacheControl,
                Response     = newResponse
            };

            return(newContent);
        }
Пример #9
0
 public async Task UpdateContentAsync(HttpResponseMessage notModifiedResponse, CacheContent cacheContent)
 {
     var newExpires = HttpCache.GetExpireDate(notModifiedResponse);
     if (newExpires > cacheContent.Expires)
     {
         cacheContent.Expires = newExpires;
     }
    //TODO Copy headers from notModifiedResponse to cacheContent
    
     await _contentStore.UpdateEntryAsync(cacheContent);
 }
Пример #10
0
        public async Task UpdateContentAsync(HttpResponseMessage notModifiedResponse, CacheContent cacheContent)
        {
            var newExpires = HttpCache.GetExpireDate(notModifiedResponse);

            if (newExpires > cacheContent.Expires)
            {
                cacheContent.Expires = newExpires;
            }
            //TODO Copy headers from notModifiedResponse to cacheContent

            await _contentStore.UpdateEntryAsync(cacheContent);
        }