TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1829 1.47K
День 1493. #ЗаметкиНаПолях #TipsAndTricks
Используем Сгенерированное Регулярное Выражение в Ограничениях Маршрута
ASP.NET Core
Регулярное выражение на основе сгенерированного кода предоставляет несколько преимуществ по сравнению с традиционным классом Regex:
- Более быстрое время запуска, так как весь код генерируется во время компиляции. Не нужно анализировать шаблон регулярного выражения и генерировать оптимизированный код для выполнения регулярного выражения во время выполнения.
- Улучшенная поддержка тримминга. Код, который не используется, не включается в окончательный бинарный файл.
- Улучшенная поддержка отладки. Вы можете пройтись по коду и посмотреть, что происходит.

Чтобы использовать генератор исходного кода для регулярных выражений, вам необходимы .NET 7 и C# 11. Для стандартных регулярных выражений IDE вроде Visual Studio или Rider даже предложат вам автоматически преобразовать их на использование генераторов кода.

Маршрутизация ASP.NET Core позволяет устанавливать ограничения на параметры маршрута. Ограничение может быть шаблоном регулярного выражения. В большинстве случаев этот шаблон – строковая константа:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseRouting();

app.MapGet(
"{value:regex(^([01]?[0-9]|2[0-3]):[0-5][0-9]$)}",
(string value) => "Время: " + value);

app.Run();

Этот код гарантирует, что параметр value соответствует времени в 24-часовом формате.

Однако ASP.NET Core предоставляет возможность создавать собственные ограничения путем реализации IRouteConstraint или наследования от класса, реализующего этот интерфейс. В этом случае вы можете использовать RegexRouteConstraint и предоставить регулярное выражение в конструкторе:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRouting(options =>
{
// регистрируем ограничение
options.ConstraintMap.Add(
"time", typeof(TimeRouteConstraint));
});

var app = builder.Build();
app.UseRouting();

app.MapGet(
"{value:time}",
(string value) => "Время: " + value);

app.Run();

sealed partial class TimeRouteConstraint
: RegexRouteConstraint
{
[GeneratedRegex("^([01]?[0-9]|2[0-3]):[0-5][0-9]$")]
private static partial Regex TimeRegex();

public TimeRouteConstraint()
: base(TimeRegex())
{
}
}

Источник: https://www.meziantou.net/using-source-generated-regex-in-asp-net-core-routing.htm
  • 👍 11
More from @netdeveloperdiary
  1. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  2. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  3. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
  4. Oct 9, 2026День 2809. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Окончание Начало 3.…
  5. Oct 8, 2026День 2808. #Карьера 5 Навыков, Которые Помогут Быстрее Стать Сеньором. Начало В ИТ есть се…
  6. Oct 7, 2026День 2807. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Окончание Нач…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →