| File: System\Net\Http\Headers\CacheControlHeaderParser.cs | Web Access |
| Project: src\runtime\src\libraries\System.Net.Http\src\System.Net.Http.csproj (System.Net.Http) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Diagnostics; namespace System.Net.Http.Headers { internal sealed class CacheControlHeaderParser : BaseHeaderParser { internal static readonly CacheControlHeaderParser Parser = new CacheControlHeaderParser(); // The Cache-Control header is special: It is a header supporting a list of values, but we represent the list // as _one_ instance of CacheControlHeaderValue. I.e we set 'SupportsMultipleValues' to 'true' since it is // OK to have multiple Cache-Control headers in a request/response message. However, after parsing all // Cache-Control headers, only one instance of CacheControlHeaderValue is created (if all headers contain valid // values, otherwise we may have multiple strings containing the invalid values). private CacheControlHeaderParser() : base(true) { } protected override int GetParsedValueLength(string value, int startIndex, object? storeValue, out object? parsedValue) { CacheControlHeaderValue? temp = null; bool isInvalidValue = true; if (storeValue is List<object> list) { foreach (object item in list) { if (item is not HttpHeaders.InvalidValue) { isInvalidValue = false; temp = item as CacheControlHeaderValue; break; } } } else { if (storeValue is not HttpHeaders.InvalidValue) { isInvalidValue = false; temp = storeValue as CacheControlHeaderValue; } } Debug.Assert(isInvalidValue || storeValue == null || temp != null, "'storeValue' is not of type CacheControlHeaderValue"); int resultLength = CacheControlHeaderValue.GetCacheControlLength(value, startIndex, temp, out temp); parsedValue = temp; return resultLength; } } }