<PackageReference Include="System.ClientModel" Version="1.2.1" />

HttpClientResponseHeaders

using System.ClientModel.Internal; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Net.Http.Headers; using System.Runtime.CompilerServices; namespace System.ClientModel.Primitives { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal class HttpClientResponseHeaders : PipelineResponseHeaders { private readonly HttpResponseMessage _httpResponse; private readonly HttpContent _httpResponseContent; public HttpClientResponseHeaders(HttpResponseMessage response, HttpContent responseContent) { _httpResponse = response; _httpResponseContent = responseContent; } public override bool TryGetValue(string name, [System.Runtime.CompilerServices.Nullable(2)] out string value) { Argument.AssertNotNullOrEmpty(name, "name"); return TryGetHeader(_httpResponse.Headers, _httpResponseContent, name, out value); } public override bool TryGetValues(string name, [System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1 })] out IEnumerable<string> values) { Argument.AssertNotNullOrEmpty(name, "name"); return TryGetHeader(_httpResponse.Headers, _httpResponseContent, name, out values); } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1, 1 })] public override IEnumerator<KeyValuePair<string, string>> GetEnumerator() { return GetHeadersStringValues(_httpResponse.Headers, _httpResponseContent).GetEnumerator(); } private static bool TryGetHeader(HttpHeaders headers, [System.Runtime.CompilerServices.Nullable(2)] HttpContent content, string name, [System.Runtime.CompilerServices.Nullable(2)] [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out string value) { if (TryGetHeader(headers, content, name, out IEnumerable<string> values)) { value = JoinHeaderValues(values); return true; } value = null; return false; } private static bool TryGetHeader(HttpHeaders headers, [System.Runtime.CompilerServices.Nullable(2)] HttpContent content, string name, [System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1 })] [System.Diagnostics.CodeAnalysis.NotNullWhen(true)] out IEnumerable<string> values) { if (!headers.TryGetValues(name, out values)) return content?.Headers.TryGetValues(name, out values) ?? false; return true; } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1, 1 })] private static IEnumerable<KeyValuePair<string, string>> GetHeadersStringValues(HttpHeaders headers, [System.Runtime.CompilerServices.Nullable(2)] HttpContent content) { foreach (KeyValuePair<string, IEnumerable<string>> header in headers) { yield return new KeyValuePair<string, string>(header.Key, JoinHeaderValues(header.Value)); } if (content != null) { foreach (KeyValuePair<string, IEnumerable<string>> header2 in content.Headers) { yield return new KeyValuePair<string, string>(header2.Key, JoinHeaderValues(header2.Value)); } } } private static string JoinHeaderValues(IEnumerable<string> values) { return string.Join(",", values); } } }