public Response <List <Func <DelegatingHandler> > > Get(DownstreamReRoute downstreamReRoute) { var globalDelegatingHandlers = _serviceProvider .GetServices <GlobalDelegatingHandler>() .ToList(); var reRouteSpecificHandlers = _serviceProvider .GetServices <DelegatingHandler>() .ToList(); var handlers = new List <Func <DelegatingHandler> >(); foreach (var handler in globalDelegatingHandlers) { if (GlobalIsInHandlersConfig(downstreamReRoute, handler)) { reRouteSpecificHandlers.Add(handler.DelegatingHandler); } else { handlers.Add(() => handler.DelegatingHandler); } } if (downstreamReRoute.DelegatingHandlers.Any()) { var sorted = SortByConfigOrder(downstreamReRoute, reRouteSpecificHandlers); foreach (var handler in sorted) { handlers.Add(() => handler); } } if (downstreamReRoute.HttpHandlerOptions.UseTracing) { handlers.Add(() => (DelegatingHandler)_tracingFactory.Get()); } if (downstreamReRoute.QosOptions.UseQos) { var handler = _qoSFactory.Get(downstreamReRoute); if (handler != null && !handler.IsError) { handlers.Add(() => handler.Data); } else { _logger.LogWarning($"ReRoute {downstreamReRoute.UpstreamPathTemplate} specifies use QoS but no QosHandler found in DI container. Will use not use a QosHandler, please check your setup!"); handlers.Add(() => new NoQosDelegatingHandler()); } } return(new OkResponse <List <Func <DelegatingHandler> > >(handlers)); }
public Response <List <Func <DelegatingHandler> > > Get(DownstreamReRoute request) { var globalDelegatingHandlers = _serviceProvider .GetServices <GlobalDelegatingHandler>() .ToList(); var reRouteSpecificHandlers = _serviceProvider .GetServices <DelegatingHandler>() .ToList(); var handlers = new List <Func <DelegatingHandler> >(); foreach (var handler in globalDelegatingHandlers) { if (GlobalIsInHandlersConfig(request, handler)) { reRouteSpecificHandlers.Add(handler.DelegatingHandler); } else { handlers.Add(() => handler.DelegatingHandler); } } if (request.DelegatingHandlers.Any()) { var sorted = SortByConfigOrder(request, reRouteSpecificHandlers); foreach (var handler in sorted) { handlers.Add(() => handler); } } if (request.HttpHandlerOptions.UseTracing) { handlers.Add(() => (DelegatingHandler)_tracingFactory.Get()); } if (request.QosOptions.UseQos) { var handler = _qoSFactory.Get(request); if (handler != null && !handler.IsError) { handlers.Add(() => handler.Data); } else { return(new ErrorResponse <List <Func <DelegatingHandler> > >(handler?.Errors)); } } return(new OkResponse <List <Func <DelegatingHandler> > >(handlers)); }