elsa-core/src/modules/Elsa.Http/Services/RouteMatcher.cs
Sipke Schoorstra 18765cc386 Refactor route normalization logic
Simplified route normalization logic by removing unnecessary lowercase conversion and adjusted usages accordingly. These changes improve code readability, maintain consistency and fixes that route values are stored lower-cased instead of original-cased.
2025-01-15 11:17:21 +01:00

32 lines
1 KiB
C#

// Taken & adapted from https://github.com/markvincze/Stubbery/blob/main/src/Stubbery/RequestMatching/RouteMatcher.cs
using Elsa.Extensions;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Routing.Template;
namespace Elsa.Http.Services;
/// <inheritdoc />
public class RouteMatcher : IRouteMatcher
{
/// <inheritdoc />
public RouteValueDictionary? Match(string routeTemplate, string route)
{
var template = TemplateParser.Parse(routeTemplate);
var matcher = new TemplateMatcher(template, GetDefaults(template));
var values = new RouteValueDictionary();
return matcher.TryMatch(route, values) ? values : null;
}
private static RouteValueDictionary GetDefaults(RouteTemplate parsedTemplate)
{
var result = new RouteValueDictionary();
foreach (var parameter in parsedTemplate.Parameters)
if (parameter.DefaultValue != null)
result.Add(parameter.Name!, parameter.DefaultValue);
return result;
}
}