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))); }