elsa-core/src/modules/Elsa.Http/Services/RouteMatcher.cs

31 lines
1,003 B
C#
Raw Normal View History

// Taken & adapted from https://github.com/markvincze/Stubbery/blob/main/src/Stubbery/RequestMatching/RouteMatcher.cs
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)
2023-08-14 12:47:35 +00:00
result.Add(parameter.Name!, parameter.DefaultValue);
return result;
}
}