| File: src\aspnetcore\src\Shared\HttpSys\RequestProcessing\HeaderParser.cs | Web Access |
| Project: src\aspnetcore\src\Servers\IIS\IIS\src\Microsoft.AspNetCore.Server.IIS.csproj (Microsoft.AspNetCore.Server.IIS) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Extensions.Primitives; namespace Microsoft.AspNetCore.HttpSys.Internal; internal static class HeaderParser { internal static IEnumerable<string> Empty = Array.Empty<string>(); // Split on commas, except in quotes internal static IEnumerable<string> SplitValues(StringValues values) { foreach (var value in values) { int start = 0; bool inQuotes = false; int current = 0; for (; current < value!.Length; current++) { char ch = value[current]; if (inQuotes) { if (ch == '"') { inQuotes = false; } } else if (ch == '"') { inQuotes = true; } else if (ch == ',') { var subValue = value.Substring(start, current - start); if (!string.IsNullOrWhiteSpace(subValue)) { yield return subValue.Trim(); start = current + 1; } } } if (start < current) { var subValue = value.Substring(start, current - start); if (!string.IsNullOrWhiteSpace(subValue)) { yield return subValue.Trim(); } } } } }