2022-04-27 18:29:09 +00:00
|
|
|
// Taken & adapted from https://github.com/markvincze/Stubbery/blob/main/src/Stubbery/RequestMatching/RouteMatcher.cs
|
|
|
|
|
|
|
|
|
|
using Microsoft.AspNetCore.Routing;
|
|
|
|
|
using Microsoft.AspNetCore.Routing.Template;
|
|
|
|
|
|
2023-03-03 21:47:23 +00:00
|
|
|
namespace Elsa.Http.Services;
|
2022-11-19 21:30:43 +00:00
|
|
|
|
2023-03-08 09:09:25 +00:00
|
|
|
/// <inheritdoc />
|
2022-11-19 21:30:43 +00:00
|
|
|
public class RouteMatcher : IRouteMatcher
|
2022-04-27 18:29:09 +00:00
|
|
|
{
|
2023-03-08 09:09:25 +00:00
|
|
|
/// <inheritdoc />
|
2023-10-20 07:51:56 +00:00
|
|
|
public RouteValueDictionary? Match(string routeTemplate, string route)
|
2022-04-27 18:29:09 +00:00
|
|
|
{
|
2025-01-15 10:17:21 +00:00
|
|
|
var template = TemplateParser.Parse(routeTemplate);
|
2022-11-19 21:30:43 +00:00
|
|
|
var matcher = new TemplateMatcher(template, GetDefaults(template));
|
|
|
|
|
var values = new RouteValueDictionary();
|
2022-04-27 18:29:09 +00:00
|
|
|
|
2025-01-15 10:17:21 +00:00
|
|
|
return matcher.TryMatch(route, values) ? values : null;
|
2022-11-19 21:30:43 +00:00
|
|
|
}
|
2022-04-27 18:29:09 +00:00
|
|
|
|
2022-11-19 21:30:43 +00:00
|
|
|
private static RouteValueDictionary GetDefaults(RouteTemplate parsedTemplate)
|
|
|
|
|
{
|
|
|
|
|
var result = new RouteValueDictionary();
|
2022-04-27 18:29:09 +00:00
|
|
|
|
2022-11-19 21:30:43 +00:00
|
|
|
foreach (var parameter in parsedTemplate.Parameters)
|
|
|
|
|
if (parameter.DefaultValue != null)
|
2023-08-14 12:47:35 +00:00
|
|
|
result.Add(parameter.Name!, parameter.DefaultValue);
|
2022-04-27 18:29:09 +00:00
|
|
|
|
2022-11-19 21:30:43 +00:00
|
|
|
return result;
|
2022-04-27 18:29:09 +00:00
|
|
|
}
|
|
|
|
|
}
|