| File: PatternSegments\DateTimeSegment.cs | Web Access |
| Project: src\aspnetcore\src\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj (Microsoft.AspNetCore.Rewrite) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; namespace Microsoft.AspNetCore.Rewrite.PatternSegments; internal sealed class DateTimeSegment : PatternSegment { private readonly DateTimePortion _portion; public DateTimeSegment(string segment) { switch (segment) { case "TIME_YEAR": _portion = DateTimePortion.Year; break; case "TIME_MON": _portion = DateTimePortion.Month; break; case "TIME_DAY": _portion = DateTimePortion.Day; break; case "TIME_HOUR": _portion = DateTimePortion.Hour; break; case "TIME_MIN": _portion = DateTimePortion.Minute; break; case "TIME_SEC": _portion = DateTimePortion.Second; break; case "TIME_WDAY": _portion = DateTimePortion.DayOfWeek; break; case "TIME": _portion = DateTimePortion.Time; break; default: throw new FormatException($"Unsupported segment: '{segment}'"); } } public override string? Evaluate(RewriteContext context, BackReferenceCollection? ruleBackReferences, BackReferenceCollection? conditionBackReference) { switch (_portion) { case DateTimePortion.Year: return DateTimeOffset.UtcNow.Year.ToString(CultureInfo.InvariantCulture); case DateTimePortion.Month: return DateTimeOffset.UtcNow.Month.ToString(CultureInfo.InvariantCulture); case DateTimePortion.Day: return DateTimeOffset.UtcNow.Day.ToString(CultureInfo.InvariantCulture); case DateTimePortion.Hour: return DateTimeOffset.UtcNow.Hour.ToString(CultureInfo.InvariantCulture); case DateTimePortion.Minute: return DateTimeOffset.UtcNow.Minute.ToString(CultureInfo.InvariantCulture); case DateTimePortion.Second: return DateTimeOffset.UtcNow.Second.ToString(CultureInfo.InvariantCulture); case DateTimePortion.DayOfWeek: return ((int)DateTimeOffset.UtcNow.DayOfWeek).ToString(CultureInfo.InvariantCulture); case DateTimePortion.Time: return DateTimeOffset.UtcNow.ToString(CultureInfo.InvariantCulture); default: return string.Empty; } } private enum DateTimePortion { Year, Month, Day, Hour, Minute, Second, DayOfWeek, Time } }