예제 #1
0
        public async Task <CacheEntry> Get(ICacheContext context)
        {
            var key = await GetKey(context);

            var cacheEntry = await _cache.Get <CacheEntry>(key);

            if (cacheEntry == null)
            {
                return(CacheEntry.Empty);
            }

            var validation = context.ResponseValidator(context, cacheEntry.Metadata);

            if (validation == ResponseValidationResult.Stale && !context.AllowStaleResultValidator(context, cacheEntry.Metadata))
            {
                return(CacheEntry.Empty);
            }

            if (validation != ResponseValidationResult.OK &&
                validation != ResponseValidationResult.Stale &&
                validation != ResponseValidationResult.MustRevalidate)
            {
                return(CacheEntry.Empty);
            }

            object result;

            if (cacheEntry.IsHttpResponseMessage)
            {
                var responseBuffer = cacheEntry.Value as byte[];

                result = await _serializer.Deserialize(responseBuffer, context.Token);
            }
            else
            {
                result = cacheEntry.Value;
            }

            return(new CacheEntry(result, cacheEntry.Metadata));
        }