private async Task <IList <ParsedRoute> > GetRoutesAsync(IConfigErrorReporter errorReporter, CancellationToken cancellation) { var routes = await _routesRepo.GetRoutesAsync(cancellation); var seenRouteIds = new HashSet <string>(); var sortedRoutes = new SortedList <(int, string), ParsedRoute>(routes?.Count ?? 0); if (routes == null) { return(sortedRoutes.Values); } foreach (var route in routes) { if (seenRouteIds.Contains(route.RouteId)) { errorReporter.ReportError(ConfigErrors.RouteDuplicateId, route.RouteId, $"Duplicate route '{route.RouteId}'."); continue; } try { foreach (var filter in _filters) { await filter.ConfigureRouteAsync(route, cancellation); } } catch (Exception ex) { errorReporter.ReportError(ConfigErrors.ConfigBuilderClusterException, route.RouteId, "An exception was thrown from the configuration callbacks.", ex); continue; } var parsedRoute = new ParsedRoute { RouteId = route.RouteId, Methods = route.Match.Methods, Host = route.Match.Host, Path = route.Match.Path, Priority = route.Priority, ClusterId = route.ClusterId, AuthorizationPolicy = route.AuthorizationPolicy, CorsPolicy = route.CorsPolicy, Metadata = route.Metadata, Transforms = route.Transforms, }; if (!await _parsedRouteValidator.ValidateRouteAsync(parsedRoute, errorReporter)) { // parsedRouteValidator already reported error message continue; } sortedRoutes.Add((parsedRoute.Priority ?? 0, parsedRoute.RouteId), parsedRoute); } return(sortedRoutes.Values); }
private async Task <IList <ParsedRoute> > GetRoutesAsync(IConfigErrorReporter errorReporter, CancellationToken cancellation) { var routes = await _routesRepo.GetRoutesAsync(cancellation); var seenRouteIds = new HashSet <string>(); var sortedRoutes = new SortedList <(int, string), ParsedRoute>(routes?.Count ?? 0); if (routes != null) { foreach (var route in routes) { if (seenRouteIds.Contains(route.RouteId)) { errorReporter.ReportError(ConfigErrors.RouteDuplicateId, route.RouteId, $"Duplicate route '{route.RouteId}'."); continue; } var parsedRoute = new ParsedRoute { RouteId = route.RouteId, Methods = route.Match.Methods, Host = route.Match.Host, Path = route.Match.Path, Priority = route.Priority, BackendId = route.BackendId, Metadata = route.Metadata, }; if (!_parsedRouteValidator.ValidateRoute(parsedRoute, errorReporter)) { // parsedRouteValidator already reported error message continue; } sortedRoutes.Add((parsedRoute.Priority ?? 0, parsedRoute.RouteId), parsedRoute); } } return(sortedRoutes.Values); }