| File: Routing\RoutePatternWriter.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text; using Microsoft.AspNetCore.Routing.Patterns; namespace Microsoft.AspNetCore.Mvc.Routing; internal static class RoutePatternWriter { public static void WriteString(StringBuilder sb, IEnumerable<RoutePatternPathSegment> routeSegments) { foreach (var segment in routeSegments) { if (sb.Length > 0) { sb.Append('/'); } WriteString(sb, segment); } } private static void WriteString(StringBuilder sb, RoutePatternPathSegment segment) { for (var i = 0; i < segment.Parts.Count; i++) { WriteString(sb, segment.Parts[i]); } } private static void WriteString(StringBuilder sb, RoutePatternPart part) { if (part.IsParameter && part is RoutePatternParameterPart parameterPart) { sb.Append('{'); if (parameterPart.IsCatchAll) { sb.Append('*'); if (!parameterPart.EncodeSlashes) { sb.Append('*'); } } sb.Append(parameterPart.Name); foreach (var item in parameterPart.ParameterPolicies) { sb.Append(':'); sb.Append(item.Content); } if (parameterPart.Default != null) { sb.Append('='); sb.Append(parameterPart.Default); } if (parameterPart.IsOptional) { sb.Append('?'); } sb.Append('}'); } else if (part is RoutePatternLiteralPart literalPart) { sb.Append(literalPart.Content); } else if (part is RoutePatternSeparatorPart separatorPart) { sb.Append(separatorPart.Content); } else { throw new NotSupportedException(); } } }