Esempio n. 1
0
        /// <summary>
        /// Send the request
        /// </summary>
        /// <param name="request">Request</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>HttpResponseMessage</returns>
        protected override async Task <HttpResponseMessage> SendAsync(
            HttpRequestMessage request,
            CancellationToken cancellationToken)
        {
            const int Zero = 0;

            var isRetryTimesHeaderSet     = request.Headers.TryGetValues(CustomHttpHeaderFactory.RetryTimes, out IEnumerable <string> retryTimesValues);
            var isRequestCacheIdHeaderSet = request.Headers.TryGetValues(CustomHttpHeaderFactory.RequestCacheId, out IEnumerable <string> requestCacheIdValues);

            // Add header: Retry-Times
            if (!isRetryTimesHeaderSet || retryTimesValues.Count() > 1)
            {
                request.Headers.Remove(CustomHttpHeaderFactory.RetryTimes);
                request.Headers.Add(CustomHttpHeaderFactory.RetryTimes, Zero.ToString());
            }

            // Add header: Request-Cache-Id
            if (!isRequestCacheIdHeaderSet || requestCacheIdValues.Count() > 1)
            {
                request.Headers.Remove(CustomHttpHeaderFactory.RequestCacheId);
                request.Headers.Add(CustomHttpHeaderFactory.RequestCacheId, CacheKeyFactory.GetKeyRequestCache());
            }

            // base.SendAsync calls the inner handler
            var response = await base.SendAsync(request, cancellationToken);

            return(response);
        }