Skip to content

Commit 6c32709

Browse files
committed
Ported Endpoints routing to temporary use the legacy routing (#326)
1 parent 572c6b3 commit 6c32709

File tree

1 file changed

+51
-15
lines changed

1 file changed

+51
-15
lines changed

src/MyTested.AspNetCore.Mvc.Abstractions/Internal/Application/ApplicationBuilderMock.cs

Lines changed: 51 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -161,28 +161,64 @@ private void ExtractEndpointRoutes(Func<RequestDelegate, RequestDelegate> middle
161161

162162
foreach (EndpointDataSource endpointDataSource in endpointDataSources)
163163
{
164-
var routeEndpoints = endpointDataSource
164+
var routeEndpoints = new Dictionary<string, RouteEndpoint>();
165+
166+
var allRouteEndpoints = endpointDataSource
165167
.Endpoints
166168
.OfType<RouteEndpoint>()
167-
.Where(e => e.DisplayName.StartsWith("Route: "))
168-
.OrderBy(e => e.Order);
169-
170-
foreach (var routeEndpoint in routeEndpoints)
169+
.OrderBy(route => route.Order)
170+
.ForEach(route =>
171+
{
172+
var routeNameMetadata = route.Metadata.GetMetadata<IRouteNameMetadata>();
173+
var routeName = routeNameMetadata?.RouteName;
174+
if (routeName != null && !routeEndpoints.ContainsKey(routeName))
175+
{
176+
routeEndpoints[routeName] = route;
177+
}
178+
});
179+
180+
foreach (var routeEndpointData in routeEndpoints)
171181
{
172-
var routeName = routeEndpoint
173-
.Metadata
174-
.OfType<RouteNameMetadata>()
175-
.FirstOrDefault()
176-
?.RouteName;
182+
var routeName = routeEndpointData.Key;
183+
var routeEndpoint = routeEndpointData.Value;
184+
185+
var routePattern = routeEndpoint.RoutePattern;
186+
var rawRouteText = routePattern.RawText;
187+
188+
var defaultValues = new Dictionary<string, object>(routePattern.Defaults);
177189

178-
if (routeName == null)
190+
routePattern.Defaults.ForEach(defaultValue =>
179191
{
180-
return;
181-
}
192+
if (rawRouteText.Contains($"{defaultValue.Key}="))
193+
{
194+
defaultValues.Remove(defaultValue.Key);
195+
}
196+
});
197+
198+
var constraints = new Dictionary<string, object>();
199+
200+
routePattern.Parameters.ForEach(parameter =>
201+
{
202+
parameter.ParameterPolicies.ForEach(policy =>
203+
{
204+
if (policy.ParameterPolicy is IRouteConstraint routeConstraintPolicy)
205+
{
206+
constraints[parameter.Name] = routeConstraintPolicy;
207+
}
208+
});
209+
});
210+
211+
var dataTokens = routeEndpoint
212+
.Metadata
213+
.GetMetadata<IDataTokensMetadata>()
214+
?.DataTokens;
182215

183216
routeBuilder.MapRoute(
184-
name: routeName,
185-
routeEndpoint.RoutePattern.RawText);
217+
routeName,
218+
rawRouteText,
219+
defaultValues,
220+
constraints,
221+
dataTokens);
186222
}
187223
}
188224

0 commit comments

Comments
 (0)