Ejemplo n.º 1
0
        private async Task <CacheKey> GetKey(Type resultType, Uri uri, IEnumerable <string> defaultVaryByHeaders, HttpRequestHeaders headers)
        {
            var parts = new List <string>
            {
                typeof(HttpResponseMessage).IsAssignableFrom(resultType) ? "Http" : "Typed",
                uri?.ToString() ?? string.Empty
            };

            if (typeof(HttpResponseMessage).IsAssignableFrom(resultType))
            {
                var varyBy = await GetVaryByHeaders(uri, defaultVaryByHeaders);

                parts.AddRange(headers.Where(h => varyBy.Any(v => v.Equals(h.Key, StringComparison.OrdinalIgnoreCase)))
                               .SelectMany(h => h.Value.Select(v => $"{UriHelpers.NormalizeHeader(h.Key)}:{UriHelpers.NormalizeHeader(v)}"))
                               .Distinct());
            }

            return(new CacheKey(string.Join("-", parts)));
        }