protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            HttpResponseMessage response = null;

            RequestCacheSettings cacheProperty = null;

            if (CacheSettingsContainer != null)
            {
                cacheProperty = CacheSettingsContainer.Resolve(request);
            }
            else if (request.Properties.ContainsKey(CachedKey))
            {
                cacheProperty = request.Properties[CachedKey] as RequestCacheSettings;
            }

            if (cacheProperty != null && cacheProperty.IsCacheable)
            {
                var cacheService = ApiCacheService;
                switch (cacheProperty.Policy)
                {
                case CachePolicy.CacheFirst:
                    response = await GetFromCacheOrSendRequest(request, cacheProperty.ExpireInSeconds, cacheService, cancellationToken);

                    break;

                case CachePolicy.RequestFirst:
                    response = await SendRequestOrGetFromCache(request, cacheProperty.ExpireInSeconds, cacheService, cancellationToken);

                    break;
                }
            }
            else
            {
                response = await SendDefaultRequest(request, cancellationToken);
            }

            return(response);
        }
 public void Register(HttpRequestMessage request, RequestCacheSettings settings)
 {
     _settings.AddOrUpdate(GetKey(request), settings, (key, value) => settings);
 }
Пример #3
0
 internal void Register(HttpRequestMessage request, RequestCacheSettings settings)
 {
     _settings[GetKey(request)] = settings;
 }