gitextract_iih378bx/ ├── .config/ │ └── dotnet-tools.json ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── steps/ │ │ ├── check-dotnet.sh │ │ ├── macos.add-dns-records.sh │ │ ├── macos.install-certificate.sh │ │ ├── prepare-coveralls.sh │ │ ├── ubuntu.add-dns-records.sh │ │ ├── ubuntu.install-certificate.sh │ │ ├── windows.add-dns-records.ps1 │ │ └── windows.install-certificate.ps1 │ └── workflows/ │ ├── develop.yml │ ├── pr-closed.yml │ ├── pr.yml │ └── release.yml ├── .gitignore ├── .readthedocs.yaml ├── GitVersion.yml ├── LICENSE.md ├── Ocelot.Samples.sln ├── Ocelot.Samples.slnx ├── Ocelot.sln ├── Ocelot.slnx ├── README.md ├── ReleaseNotes.md ├── build.cake ├── codeanalysis.ruleset ├── codecov.yml ├── coverlet.runsettings ├── docker/ │ ├── Dockerfile.base │ ├── Dockerfile.build │ ├── Dockerfile.release │ ├── Dockerfile.windows │ ├── README.md │ ├── build-windows.sh │ ├── build.sh │ └── outdated/ │ ├── Dockerfile.8.21.0.base │ └── Dockerfile.8.23.2.base ├── docs/ │ ├── Makefile │ ├── _static/ │ │ └── overrides.css │ ├── building/ │ │ ├── building.rst │ │ ├── devprocess.rst │ │ └── releaseprocess.rst │ ├── conf.py │ ├── features/ │ │ ├── administration.rst │ │ ├── aggregation.rst │ │ ├── authentication.rst │ │ ├── authorization.rst │ │ ├── caching.rst │ │ ├── claimstransformation.rst │ │ ├── configuration.rst │ │ ├── delegatinghandlers.rst │ │ ├── dependencyinjection.rst │ │ ├── errorcodes.rst │ │ ├── graphql.rst │ │ ├── headerstransformation.rst │ │ ├── kubernetes.rst │ │ ├── loadbalancer.rst │ │ ├── logging.rst │ │ ├── metadata.rst │ │ ├── methodtransformation.rst │ │ ├── middlewareinjection.rst │ │ ├── qualityofservice.rst │ │ ├── ratelimiting.rst │ │ ├── routing.rst │ │ ├── servicediscovery.rst │ │ ├── servicefabric.rst │ │ ├── tracing.rst │ │ └── websockets.rst │ ├── index.rst │ ├── introduction/ │ │ ├── bigpicture.rst │ │ ├── gettingstarted.rst │ │ ├── gotchas.rst │ │ └── notsupported.rst │ ├── make.bat │ ├── make.ps1 │ ├── make.sh │ ├── readme.md │ ├── releasenotes.rst │ └── requirements.txt ├── postman/ │ └── ocelot.postman_collection.json ├── samples/ │ ├── Basic/ │ │ ├── API.http │ │ ├── Ocelot.Samples.Basic.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── ocelot.json │ │ └── packages.lock.json │ ├── Configuration/ │ │ ├── API.http │ │ ├── Ocelot.Samples.Configuration.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── ocelot-configuration/ │ │ │ ├── ocelot.docs.json │ │ │ ├── ocelot.global.json │ │ │ ├── ocelot.posts.json │ │ │ └── ocelot.weather.json │ │ └── packages.lock.json │ ├── Eureka/ │ │ ├── ApiGateway/ │ │ │ ├── Ocelot.Samples.Eureka.ApiGateway.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.json │ │ │ ├── ocelot.json │ │ │ └── packages.lock.json │ │ ├── DownstreamService/ │ │ │ ├── Controllers/ │ │ │ │ └── CategoryController.cs │ │ │ ├── Ocelot.Samples.Eureka.DownstreamService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── packages.lock.json │ │ ├── OcelotEureka.sln │ │ └── README.md │ ├── GraphQL/ │ │ ├── GraphQlDelegatingHandler.cs │ │ ├── Models/ │ │ │ ├── Hero.cs │ │ │ └── Query.cs │ │ ├── Ocelot.Samples.GraphQL.csproj │ │ ├── OcelotGraphQL.sln │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── README.md │ │ ├── ocelot.json │ │ └── packages.lock.json │ ├── Kubernetes/ │ │ ├── .dockerignore │ │ ├── ApiGateway/ │ │ │ ├── Dockerfile │ │ │ ├── Ocelot.Samples.Kubernetes.ApiGateway.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ ├── ocelot.json │ │ │ └── packages.lock.json │ │ ├── Dockerfile │ │ ├── DownstreamService/ │ │ │ ├── Controllers/ │ │ │ │ ├── ValuesController.cs │ │ │ │ └── WeatherForecastController.cs │ │ │ ├── Dockerfile │ │ │ ├── Models/ │ │ │ │ └── WeatherForecast.cs │ │ │ ├── Ocelot.Samples.Kubernetes.DownstreamService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── packages.lock.json │ │ └── OcelotKube.sln │ ├── Metadata/ │ │ ├── API.http │ │ ├── MetadataResponder.cs │ │ ├── Models/ │ │ │ ├── PostsPlugin2.cs │ │ │ ├── TestDeflateResponse.cs │ │ │ ├── TestGZipResponse.cs │ │ │ ├── WeatherCurrent.cs │ │ │ ├── WeatherCurrentCondition.cs │ │ │ ├── WeatherLocation.cs │ │ │ └── WeatherResponse.cs │ │ ├── MyMiddlewares.cs │ │ ├── Ocelot.Samples.Metadata.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── ocelot.json │ │ └── packages.lock.json │ ├── OpenTracing/ │ │ ├── Ocelot.Samples.OpenTracing.csproj │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── ocelot.json │ │ └── packages.lock.json │ ├── ServiceDiscovery/ │ │ ├── .dockerignore │ │ ├── ApiGateway/ │ │ │ ├── Ocelot.Samples.ServiceDiscovery.ApiGateway.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── ServiceDiscovery/ │ │ │ │ ├── MyServiceDiscoveryProvider.cs │ │ │ │ └── MyServiceDiscoveryProviderFactory.cs │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ ├── ocelot.json │ │ │ └── packages.lock.json │ │ ├── DownstreamService/ │ │ │ ├── Controllers/ │ │ │ │ ├── CategoriesController.cs │ │ │ │ ├── HealthController.cs │ │ │ │ └── WeatherForecastController.cs │ │ │ ├── Models/ │ │ │ │ ├── HealthResult.cs │ │ │ │ ├── MicroserviceResult.cs │ │ │ │ ├── ReadyResult.cs │ │ │ │ └── WeatherForecast.cs │ │ │ ├── Ocelot.Samples.ServiceDiscovery.DownstreamService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ └── packages.lock.json │ │ ├── Ocelot.Samples.ServiceDiscovery.sln │ │ └── README.md │ ├── ServiceFabric/ │ │ ├── .gitignore │ │ ├── ApiGateway/ │ │ │ ├── Ocelot.Samples.ServiceFabric.ApiGateway.csproj │ │ │ ├── OcelotApplicationApiGateway.cs │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── ServiceEventListener.cs │ │ │ ├── ServiceEventSource.cs │ │ │ ├── WebCommunicationListener.cs │ │ │ ├── appsettings.Development.json │ │ │ ├── appsettings.json │ │ │ ├── ocelot.json │ │ │ └── packages.lock.json │ │ ├── CONTRIBUTING.md │ │ ├── DownstreamService/ │ │ │ ├── ApiGateway.cs │ │ │ ├── Controllers/ │ │ │ │ └── ValuesController.cs │ │ │ ├── Ocelot.Samples.ServiceFabric.DownstreamService.csproj │ │ │ ├── Program.cs │ │ │ ├── Properties/ │ │ │ │ └── launchSettings.json │ │ │ ├── ServiceEventSource.cs │ │ │ └── packages.lock.json │ │ ├── LICENSE.md │ │ ├── Ocelot.Samples.ServiceFabric.sln │ │ ├── OcelotApplication/ │ │ │ ├── ApplicationManifest.xml │ │ │ ├── OcelotApplicationApiGatewayPkg/ │ │ │ │ ├── Code/ │ │ │ │ │ ├── entryPoint.cmd │ │ │ │ │ └── entryPoint.sh │ │ │ │ ├── Config/ │ │ │ │ │ ├── Settings.xml │ │ │ │ │ └── _readme.txt │ │ │ │ ├── Data/ │ │ │ │ │ └── _readme.txt │ │ │ │ ├── ServiceManifest-Linux.xml │ │ │ │ ├── ServiceManifest-Windows.xml │ │ │ │ └── ServiceManifest.xml │ │ │ └── OcelotApplicationServicePkg/ │ │ │ ├── Code/ │ │ │ │ ├── entryPoint.cmd │ │ │ │ └── entryPoint.sh │ │ │ ├── Config/ │ │ │ │ ├── Settings.xml │ │ │ │ └── _readme.txt │ │ │ ├── Data/ │ │ │ │ └── _readme.txt │ │ │ ├── ServiceManifest-Linux.xml │ │ │ ├── ServiceManifest-Windows.xml │ │ │ └── ServiceManifest.xml │ │ ├── README.md │ │ ├── build.bat │ │ ├── build.sh │ │ ├── dotnet-include.sh │ │ ├── install.ps1 │ │ ├── install.sh │ │ ├── uninstall.ps1 │ │ └── uninstall.sh │ └── Web/ │ ├── DownstreamHostBuilder.cs │ ├── Ocelot.Samples.Web.csproj │ ├── OcelotHostBuilder.cs │ ├── Properties/ │ │ └── launchSettings.json │ └── packages.lock.json ├── src/ │ ├── Ocelot/ │ │ ├── Administration/ │ │ │ ├── AdministrationPath.cs │ │ │ ├── FileConfigurationController.cs │ │ │ ├── IAdministrationPath.cs │ │ │ └── OutputCacheController.cs │ │ ├── Authentication/ │ │ │ └── AuthenticationMiddleware.cs │ │ ├── Authorization/ │ │ │ ├── AuthorizationMiddleware.cs │ │ │ ├── ClaimValueNotAuthorizedError.cs │ │ │ ├── ClaimsAuthorizer.cs │ │ │ ├── IClaimsAuthorizer.cs │ │ │ ├── IScopesAuthorizer.cs │ │ │ ├── ScopeNotAuthorizedError.cs │ │ │ ├── ScopesAuthorizer.cs │ │ │ ├── UnauthorizedError.cs │ │ │ └── UserDoesNotHaveClaimError.cs │ │ ├── Cache/ │ │ │ ├── CachedResponse.cs │ │ │ ├── DefaultCacheKeyGenerator.cs │ │ │ ├── DefaultMemoryCache.cs │ │ │ ├── ICacheKeyGenerator.cs │ │ │ ├── IOcelotCache.cs │ │ │ ├── MD5Helper.cs │ │ │ └── OutputCacheMiddleware.cs │ │ ├── Claims/ │ │ │ ├── AddClaimsToRequest.cs │ │ │ ├── IAddClaimsToRequest.cs │ │ │ └── Middleware/ │ │ │ └── ClaimsToClaimsMiddleware.cs │ │ ├── Configuration/ │ │ │ ├── AuthenticationOptions.cs │ │ │ ├── Builder/ │ │ │ │ ├── DownstreamRouteBuilder.cs │ │ │ │ ├── MetadataOptionsBuilder.cs │ │ │ │ ├── ServiceProviderConfigurationBuilder.cs │ │ │ │ └── UpstreamPathTemplateBuilder.cs │ │ │ ├── CacheOptions.cs │ │ │ ├── ChangeTracking/ │ │ │ │ ├── IOcelotConfigurationChangeTokenSource.cs │ │ │ │ ├── OcelotConfigurationChangeToken.cs │ │ │ │ ├── OcelotConfigurationChangeTokenSource.cs │ │ │ │ └── OcelotConfigurationMonitor.cs │ │ │ ├── ClaimToThing.cs │ │ │ ├── Creator/ │ │ │ │ ├── AddHeader.cs │ │ │ │ ├── AggregatesCreator.cs │ │ │ │ ├── AuthenticationOptionsCreator.cs │ │ │ │ ├── CacheOptionsCreator.cs │ │ │ │ ├── ClaimsToThingCreator.cs │ │ │ │ ├── ConfigurationCreator.cs │ │ │ │ ├── DefaultMetadataCreator.cs │ │ │ │ ├── DownstreamAddressesCreator.cs │ │ │ │ ├── DynamicRoutesCreator.cs │ │ │ │ ├── FileInternalConfigurationCreator.cs │ │ │ │ ├── HeaderFindAndReplaceCreator.cs │ │ │ │ ├── HeaderTransformations.cs │ │ │ │ ├── HttpHandlerOptionsCreator.cs │ │ │ │ ├── HttpVersionCreator.cs │ │ │ │ ├── HttpVersionPolicyCreator.cs │ │ │ │ ├── IAggregatesCreator.cs │ │ │ │ ├── IAuthenticationOptionsCreator.cs │ │ │ │ ├── ICacheOptionsCreator.cs │ │ │ │ ├── IClaimsToThingCreator.cs │ │ │ │ ├── IConfigurationCreator.cs │ │ │ │ ├── IDownstreamAddressesCreator.cs │ │ │ │ ├── IDynamicsCreator.cs │ │ │ │ ├── IHeaderFindAndReplaceCreator.cs │ │ │ │ ├── IHttpHandlerOptionsCreator.cs │ │ │ │ ├── IInternalConfigurationCreator.cs │ │ │ │ ├── ILoadBalancerOptionsCreator.cs │ │ │ │ ├── IMetadataCreator.cs │ │ │ │ ├── IQoSOptionsCreator.cs │ │ │ │ ├── IRateLimitOptionsCreator.cs │ │ │ │ ├── IRequestIdKeyCreator.cs │ │ │ │ ├── IRouteKeyCreator.cs │ │ │ │ ├── IRoutesCreator.cs │ │ │ │ ├── ISecurityOptionsCreator.cs │ │ │ │ ├── IServiceProviderConfigurationCreator.cs │ │ │ │ ├── IUpstreamHeaderTemplatePatternCreator.cs │ │ │ │ ├── IUpstreamTemplatePatternCreator.cs │ │ │ │ ├── IVersionCreator.cs │ │ │ │ ├── IVersionPolicyCreator.cs │ │ │ │ ├── LoadBalancerOptionsCreator.cs │ │ │ │ ├── QoSOptionsCreator.cs │ │ │ │ ├── RateLimitOptionsCreator.cs │ │ │ │ ├── RequestIdKeyCreator.cs │ │ │ │ ├── RouteKeyCreator.cs │ │ │ │ ├── SecurityOptionsCreator.cs │ │ │ │ ├── ServiceProviderConfigurationCreator.cs │ │ │ │ ├── StaticRoutesCreator.cs │ │ │ │ ├── UpstreamHeaderTemplatePatternCreator.cs │ │ │ │ ├── UpstreamTemplatePatternCreator.cs │ │ │ │ └── VersionPolicies.cs │ │ │ ├── DownstreamHostAndPort.cs │ │ │ ├── DownstreamRoute.cs │ │ │ ├── File/ │ │ │ │ ├── AggregateRouteConfig.cs │ │ │ │ ├── FileAggregateRoute.cs │ │ │ │ ├── FileAuthenticationOptions.cs │ │ │ │ ├── FileCacheOptions.cs │ │ │ │ ├── FileConfiguration.cs │ │ │ │ ├── FileDynamicRoute.cs │ │ │ │ ├── FileGlobalAuthenticationOptions.cs │ │ │ │ ├── FileGlobalCacheOptions.cs │ │ │ │ ├── FileGlobalConfiguration.cs │ │ │ │ ├── FileGlobalHttpHandlerOptions.cs │ │ │ │ ├── FileGlobalLoadBalancerOptions.cs │ │ │ │ ├── FileGlobalQoSOptions.cs │ │ │ │ ├── FileGlobalRateLimit.cs │ │ │ │ ├── FileGlobalRateLimitByAspNetRule.cs │ │ │ │ ├── FileGlobalRateLimitByHeaderRule.cs │ │ │ │ ├── FileGlobalRateLimitByIpRule.cs │ │ │ │ ├── FileGlobalRateLimitByMethodRule.cs │ │ │ │ ├── FileGlobalRateLimiting.cs │ │ │ │ ├── FileHostAndPort.cs │ │ │ │ ├── FileHttpHandlerOptions.cs │ │ │ │ ├── FileLoadBalancerOptions.cs │ │ │ │ ├── FileMetadataOptions.cs │ │ │ │ ├── FileQoSOptions.cs │ │ │ │ ├── FileRateLimitByAspNetRule.cs │ │ │ │ ├── FileRateLimitByHeaderRule.cs │ │ │ │ ├── FileRateLimitByIpRule.cs │ │ │ │ ├── FileRateLimitByMethodRule.cs │ │ │ │ ├── FileRateLimitRule.cs │ │ │ │ ├── FileRateLimiting.cs │ │ │ │ ├── FileRoute.cs │ │ │ │ ├── FileRouteBase.cs │ │ │ │ ├── FileSecurityOptions.cs │ │ │ │ ├── FileServiceDiscoveryProvider.cs │ │ │ │ ├── IRouteGroup.cs │ │ │ │ ├── IRouteGrouping.cs │ │ │ │ ├── IRouteRateLimiting.cs │ │ │ │ └── IRouteUpstream.cs │ │ │ ├── HeaderFindAndReplace.cs │ │ │ ├── HttpHandlerOptions.cs │ │ │ ├── IInternalConfiguration.cs │ │ │ ├── InternalConfiguration.cs │ │ │ ├── LoadBalancerOptions.cs │ │ │ ├── MetadataOptions.cs │ │ │ ├── Parser/ │ │ │ │ ├── ClaimToThingConfigurationParser.cs │ │ │ │ ├── IClaimToThingConfigurationParser.cs │ │ │ │ ├── InstructionNotForClaimsError.cs │ │ │ │ ├── NoInstructionsError.cs │ │ │ │ └── ParsingConfigurationHeaderError.cs │ │ │ ├── QoSOptions.cs │ │ │ ├── RateLimitOptions.cs │ │ │ ├── RateLimitRule.cs │ │ │ ├── Repository/ │ │ │ │ ├── ConsulFileConfigurationPollerOption.cs │ │ │ │ ├── DiskFileConfigurationRepository.cs │ │ │ │ ├── FileConfigurationPoller.cs │ │ │ │ ├── IFileConfigurationPollerOptions.cs │ │ │ │ ├── IFileConfigurationRepository.cs │ │ │ │ ├── IInternalConfigurationRepository.cs │ │ │ │ ├── InMemoryFileConfigurationPollerOptions.cs │ │ │ │ └── InMemoryInternalConfigurationRepository.cs │ │ │ ├── Route.cs │ │ │ ├── SecurityOptions.cs │ │ │ ├── ServiceProviderConfiguration.cs │ │ │ ├── Setter/ │ │ │ │ ├── FileAndInternalConfigurationSetter.cs │ │ │ │ └── IFileConfigurationSetter.cs │ │ │ └── Validator/ │ │ │ ├── ConfigurationValidationResult.cs │ │ │ ├── FileAuthenticationOptionsValidator.cs │ │ │ ├── FileConfigurationFluentValidator.cs │ │ │ ├── FileGlobalConfigurationFluentValidator.cs │ │ │ ├── FileQoSOptionsFluentValidator.cs │ │ │ ├── FileValidationFailedError.cs │ │ │ ├── HostAndPortValidator.cs │ │ │ ├── IConfigurationValidator.cs │ │ │ └── RouteFluentValidator.cs │ │ ├── DependencyInjection/ │ │ │ ├── ConfigurationBuilderExtensions.cs │ │ │ ├── Features.cs │ │ │ ├── IOcelotBuilder.cs │ │ │ ├── MergeOcelotJson.cs │ │ │ ├── OcelotBuilder.cs │ │ │ └── ServiceCollectionExtensions.cs │ │ ├── DownstreamPathManipulation/ │ │ │ ├── ChangeDownstreamPathTemplate.cs │ │ │ ├── IChangeDownstreamPathTemplate.cs │ │ │ └── Middleware/ │ │ │ └── ClaimsToDownstreamPathMiddleware.cs │ │ ├── DownstreamRouteFinder/ │ │ │ ├── DownstreamRouteHolder.cs │ │ │ ├── Finder/ │ │ │ │ ├── DiscoveryDownstreamRouteFinder.cs │ │ │ │ ├── DownstreamRouteFinder.cs │ │ │ │ ├── DownstreamRouteProviderFactory.cs │ │ │ │ ├── IDownstreamRouteProvider.cs │ │ │ │ ├── IDownstreamRouteProviderFactory.cs │ │ │ │ └── UnableToFindDownstreamRouteError.cs │ │ │ ├── HeaderMatcher/ │ │ │ │ ├── HeaderPlaceholderNameAndValueFinder.cs │ │ │ │ ├── HeadersToHeaderTemplatesMatcher.cs │ │ │ │ ├── IHeaderPlaceholderNameAndValueFinder.cs │ │ │ │ └── IHeadersToHeaderTemplatesMatcher.cs │ │ │ ├── Middleware/ │ │ │ │ └── DownstreamRouteFinderMiddleware.cs │ │ │ └── UrlMatcher/ │ │ │ ├── IPlaceholderNameAndValueFinder.cs │ │ │ ├── IUrlPathToUrlTemplateMatcher.cs │ │ │ ├── PlaceholderNameAndValue.cs │ │ │ ├── RegExUrlMatcher.cs │ │ │ ├── UrlMatch.cs │ │ │ └── UrlPathPlaceholderNameAndValueFinder.cs │ │ ├── DownstreamUrlCreator/ │ │ │ ├── DownstreamPathPlaceholderReplacer.cs │ │ │ ├── DownstreamUrlCreatorMiddleware.cs │ │ │ └── IDownstreamPathPlaceholderReplacer.cs │ │ ├── Errors/ │ │ │ ├── Error.cs │ │ │ ├── Middleware/ │ │ │ │ └── ExceptionHandlerMiddleware.cs │ │ │ ├── OcelotErrorCode.cs │ │ │ └── RequestTimedOutError.cs │ │ ├── Headers/ │ │ │ ├── AddHeadersToRequest.cs │ │ │ ├── AddHeadersToResponse.cs │ │ │ ├── HttpContextRequestHeaderReplacer.cs │ │ │ ├── HttpResponseHeaderReplacer.cs │ │ │ ├── IAddHeadersToRequest.cs │ │ │ ├── IAddHeadersToResponse.cs │ │ │ ├── IHttpContextRequestHeaderReplacer.cs │ │ │ ├── IHttpResponseHeaderReplacer.cs │ │ │ ├── IRemoveOutputHeaders.cs │ │ │ ├── Middleware/ │ │ │ │ ├── ClaimsToHeadersMiddleware.cs │ │ │ │ └── HttpHeadersTransformationMiddleware.cs │ │ │ └── RemoveOutputHeaders.cs │ │ ├── Infrastructure/ │ │ │ ├── CannotAddPlaceholderError.cs │ │ │ ├── CannotRemovePlaceholderError.cs │ │ │ ├── Claims/ │ │ │ │ ├── CannotFindClaimError.cs │ │ │ │ ├── ClaimsParser.cs │ │ │ │ └── IClaimsParser.cs │ │ │ ├── ConfigAwarePlaceholders.cs │ │ │ ├── CouldNotFindPlaceholderError.cs │ │ │ ├── DelayedMessage.cs │ │ │ ├── DesignPatterns/ │ │ │ │ └── Retry.cs │ │ │ ├── Extensions/ │ │ │ │ ├── ErrorListExtensions.cs │ │ │ │ ├── HttpContextExtensions.cs │ │ │ │ ├── HttpRequestExtensions.cs │ │ │ │ ├── IEnumerableExtensions.cs │ │ │ │ ├── Int32Extensions.cs │ │ │ │ ├── StringBuilderExtensions.cs │ │ │ │ └── StringExtensions.cs │ │ │ ├── FrameworkDescription.cs │ │ │ ├── IBus.cs │ │ │ ├── IFrameworkDescription.cs │ │ │ ├── IPlaceholders.cs │ │ │ ├── InMemoryBus.cs │ │ │ ├── Placeholders.cs │ │ │ ├── RegexGlobal.cs │ │ │ └── RequestData/ │ │ │ ├── CannotAddDataError.cs │ │ │ ├── CannotFindDataError.cs │ │ │ ├── HttpDataRepository.cs │ │ │ └── IRequestScopedDataRepository.cs │ │ ├── LoadBalancer/ │ │ │ ├── Balancers/ │ │ │ │ ├── CookieStickySessions.cs │ │ │ │ ├── LeastConnection.cs │ │ │ │ ├── NoLoadBalancer.cs │ │ │ │ └── RoundRobin.cs │ │ │ ├── Creators/ │ │ │ │ ├── CookieStickySessionsCreator.cs │ │ │ │ ├── DelegateInvokingLoadBalancerCreator.cs │ │ │ │ ├── LeastConnectionCreator.cs │ │ │ │ ├── NoLoadBalancerCreator.cs │ │ │ │ └── RoundRobinCreator.cs │ │ │ ├── Errors/ │ │ │ │ ├── CouldNotFindLoadBalancerCreatorError.cs │ │ │ │ ├── InvokingLoadBalancerCreatorError.cs │ │ │ │ ├── ServicesAreEmptyError.cs │ │ │ │ ├── ServicesAreNullError.cs │ │ │ │ └── UnableToFindLoadBalancerError.cs │ │ │ ├── Interfaces/ │ │ │ │ ├── ILoadBalancer.cs │ │ │ │ ├── ILoadBalancerCreator.cs │ │ │ │ ├── ILoadBalancerFactory.cs │ │ │ │ └── ILoadBalancerHouse.cs │ │ │ ├── Lease.cs │ │ │ ├── LeaseEventArgs.cs │ │ │ ├── LoadBalancerFactory.cs │ │ │ ├── LoadBalancerHouse.cs │ │ │ ├── LoadBalancingMiddleware.cs │ │ │ └── StickySession.cs │ │ ├── Logging/ │ │ │ ├── IOcelotLogger.cs │ │ │ ├── IOcelotLoggerFactory.cs │ │ │ ├── IOcelotTracer.cs │ │ │ ├── ITracingHandler.cs │ │ │ ├── ITracingHandlerFactory.cs │ │ │ ├── OcelotDiagnosticListener.cs │ │ │ ├── OcelotHttpTracingHandler.cs │ │ │ ├── OcelotLogger.cs │ │ │ ├── OcelotLoggerFactory.cs │ │ │ └── TracingHandlerFactory.cs │ │ ├── Metadata/ │ │ │ └── DownstreamRouteExtensions.cs │ │ ├── Middleware/ │ │ │ ├── BaseUrlFinder.cs │ │ │ ├── ConfigurationMiddleware.cs │ │ │ ├── DownstreamResponse.cs │ │ │ ├── Header.cs │ │ │ ├── HttpItemsExtensions.cs │ │ │ ├── IBaseUrlFinder.cs │ │ │ ├── OcelotMiddleware.cs │ │ │ ├── OcelotMiddlewareConfigurationDelegate.cs │ │ │ ├── OcelotMiddlewareExtensions.cs │ │ │ ├── OcelotPipelineConfiguration.cs │ │ │ ├── OcelotPipelineExtensions.cs │ │ │ └── UnauthenticatedError.cs │ │ ├── Multiplexer/ │ │ │ ├── CouldNotFindAggregatorError.cs │ │ │ ├── IDefinedAggregator.cs │ │ │ ├── IDefinedAggregatorProvider.cs │ │ │ ├── IResponseAggregator.cs │ │ │ ├── IResponseAggregatorFactory.cs │ │ │ ├── InMemoryResponseAggregatorFactory.cs │ │ │ ├── MultiplexingMiddleware.cs │ │ │ ├── ServiceLocatorDefinedAggregatorProvider.cs │ │ │ ├── SimpleJsonResponseAggregator.cs │ │ │ └── UserDefinedResponseAggregator.cs │ │ ├── Ocelot.csproj │ │ ├── QualityOfService/ │ │ │ ├── IQosFactory.cs │ │ │ ├── NoQosDelegatingHandler.cs │ │ │ ├── QosDelegatingHandlerDelegate.cs │ │ │ ├── QosFactory.cs │ │ │ └── UnableToFindQoSProviderError.cs │ │ ├── QueryStrings/ │ │ │ ├── AddQueriesToRequest.cs │ │ │ ├── ClaimsToQueryStringMiddleware.cs │ │ │ └── IAddQueriesToRequest.cs │ │ ├── RateLimiting/ │ │ │ ├── ClientRequestIdentity.cs │ │ │ ├── DistributedCacheRateLimitStorage.cs │ │ │ ├── IRateLimitStorage.cs │ │ │ ├── IRateLimiting.cs │ │ │ ├── MemoryCacheRateLimitStorage.cs │ │ │ ├── QuotaExceededError.cs │ │ │ ├── RateLimitCounter.cs │ │ │ ├── RateLimitHeaders.cs │ │ │ ├── RateLimiting.cs │ │ │ ├── RateLimitingHeaders.cs │ │ │ └── RateLimitingMiddleware.cs │ │ ├── Request/ │ │ │ ├── Creator/ │ │ │ │ ├── DownstreamRequestCreator.cs │ │ │ │ └── IDownstreamRequestCreator.cs │ │ │ ├── Mapper/ │ │ │ │ ├── IRequestMapper.cs │ │ │ │ ├── PayloadTooLargeError.cs │ │ │ │ ├── RequestMapper.cs │ │ │ │ ├── StreamHttpContent.cs │ │ │ │ └── UnmappableRequestError.cs │ │ │ └── Middleware/ │ │ │ ├── DownstreamRequest.cs │ │ │ └── DownstreamRequestInitialiserMiddleware.cs │ │ ├── RequestId/ │ │ │ ├── DefaultRequestIdKey.cs │ │ │ ├── Middleware/ │ │ │ │ └── RequestIdMiddleware.cs │ │ │ └── RequestId.cs │ │ ├── Requester/ │ │ │ ├── ConnectionToDownstreamServiceError.cs │ │ │ ├── DelegatingHandlerFactory.cs │ │ │ ├── GlobalDelegatingHandler.cs │ │ │ ├── HttpExceptionToErrorMapper.cs │ │ │ ├── IDelegatingHandlerFactory.cs │ │ │ ├── IExceptionToErrorMapper.cs │ │ │ ├── IHttpRequester.cs │ │ │ ├── IMessageInvokerPool.cs │ │ │ ├── MessageInvokerHttpRequester.cs │ │ │ ├── MessageInvokerPool.cs │ │ │ ├── Middleware/ │ │ │ │ └── HttpRequesterMiddleware.cs │ │ │ ├── RequestCanceledError.cs │ │ │ ├── ServiceCollectionExtensions.cs │ │ │ ├── TimeoutDelegatingHandler.cs │ │ │ └── UnableToCompleteRequestError.cs │ │ ├── Responder/ │ │ │ ├── ErrorsToHttpStatusCodeMapper.cs │ │ │ ├── HttpContextResponder.cs │ │ │ ├── IErrorsToHttpStatusCodeMapper.cs │ │ │ ├── IHttpResponder.cs │ │ │ └── Middleware/ │ │ │ └── ResponderMiddleware.cs │ │ ├── Responses/ │ │ │ ├── ErrorResponse.cs │ │ │ ├── OkResponse.cs │ │ │ └── Response.cs │ │ ├── Security/ │ │ │ ├── IPSecurity/ │ │ │ │ └── IPSecurityPolicy.cs │ │ │ ├── ISecurityPolicy.cs │ │ │ └── Middleware/ │ │ │ └── SecurityMiddleware.cs │ │ ├── ServiceDiscovery/ │ │ │ ├── Configuration/ │ │ │ │ └── ServiceFabricConfiguration.cs │ │ │ ├── IServiceDiscoveryProviderFactory.cs │ │ │ ├── Providers/ │ │ │ │ ├── ConfigurationServiceProvider.cs │ │ │ │ ├── IServiceDiscoveryProvider.cs │ │ │ │ └── ServiceFabricServiceDiscoveryProvider.cs │ │ │ ├── ServiceDiscoveryFinderDelegate.cs │ │ │ ├── ServiceDiscoveryProviderFactory.cs │ │ │ └── UnableToFindServiceDiscoveryProviderError.cs │ │ ├── Usings.cs │ │ ├── Values/ │ │ │ ├── DownstreamPath.cs │ │ │ ├── DownstreamPathTemplate.cs │ │ │ ├── Service.cs │ │ │ ├── ServiceHostAndPort.cs │ │ │ ├── UpstreamHeaderTemplate.cs │ │ │ └── UpstreamPathTemplate.cs │ │ ├── WebSockets/ │ │ │ ├── ClientWebSocketConnector.cs │ │ │ ├── ClientWebSocketOptionsProxy.cs │ │ │ ├── ClientWebSocketProxy.cs │ │ │ ├── IClientWebSocket.cs │ │ │ ├── IClientWebSocketOptions.cs │ │ │ ├── IWebSocketsFactory.cs │ │ │ ├── WebSocketsFactory.cs │ │ │ └── WebSocketsProxyMiddleware.cs │ │ └── packages.lock.json │ ├── Ocelot.Provider.Consul/ │ │ ├── Consul.cs │ │ ├── ConsulClientFactory.cs │ │ ├── ConsulFileConfigurationRepository.cs │ │ ├── ConsulMiddlewareConfigurationProvider.cs │ │ ├── ConsulProviderFactory.cs │ │ ├── ConsulRegistryConfiguration.cs │ │ ├── DefaultConsulServiceBuilder.cs │ │ ├── Interfaces/ │ │ │ ├── IConsulClientFactory.cs │ │ │ └── IConsulServiceBuilder.cs │ │ ├── Ocelot.Provider.Consul.csproj │ │ ├── OcelotBuilderExtensions.cs │ │ ├── PollConsul.cs │ │ ├── UnableToSetConfigInConsulError.cs │ │ ├── Usings.cs │ │ └── packages.lock.json │ ├── Ocelot.Provider.Eureka/ │ │ ├── Eureka.cs │ │ ├── EurekaMiddlewareConfigurationProvider.cs │ │ ├── EurekaProviderFactory.cs │ │ ├── Ocelot.Provider.Eureka.csproj │ │ ├── OcelotBuilderExtensions.cs │ │ ├── Usings.cs │ │ └── packages.lock.json │ ├── Ocelot.Provider.Kubernetes/ │ │ ├── EndPointClientV1.cs │ │ ├── Interfaces/ │ │ │ ├── IEndPointClient.cs │ │ │ ├── IKubeApiClientFactory.cs │ │ │ ├── IKubeServiceBuilder.cs │ │ │ └── IKubeServiceCreator.cs │ │ ├── Kube.cs │ │ ├── KubeApiClientExtensions.cs │ │ ├── KubeApiClientFactory.cs │ │ ├── KubeRegistryConfiguration.cs │ │ ├── KubeServiceBuilder.cs │ │ ├── KubeServiceCreator.cs │ │ ├── KubernetesProviderFactory.cs │ │ ├── ObservableExtensions.cs │ │ ├── Ocelot.Provider.Kubernetes.csproj │ │ ├── OcelotBuilderExtensions.cs │ │ ├── PollKube.cs │ │ ├── Usings.cs │ │ ├── WatchKube.cs │ │ └── packages.lock.json │ └── Ocelot.Provider.Polly/ │ ├── CircuitBreakerStrategy.cs │ ├── Interfaces/ │ │ └── IPollyQoSResiliencePipelineProvider.cs │ ├── Ocelot.Provider.Polly.csproj │ ├── OcelotBuilderExtensions.cs │ ├── OcelotResiliencePipelineKey.cs │ ├── PollyQoSResiliencePipelineProvider.cs │ ├── PollyResiliencePipelineDelegatingHandler.cs │ ├── TimeoutStrategy.cs │ ├── Usings.cs │ └── packages.lock.json ├── test/ │ ├── Ocelot.AcceptanceTests/ │ │ ├── .gitignore │ │ ├── Administration/ │ │ │ ├── AdministrationSteps.cs │ │ │ ├── CacheManagerTests.cs │ │ │ └── OcelotBuilderExtensions.cs │ │ ├── AggregateTests.cs │ │ ├── Authentication/ │ │ │ ├── AuthenticationTests.cs │ │ │ └── MultipleAuthSchemesFeatureTests.cs │ │ ├── Authorization/ │ │ │ ├── AuthorizationSteps.cs │ │ │ └── AuthorizationTests.cs │ │ ├── Caching/ │ │ │ └── CachingTests.cs │ │ ├── CancelRequestTests.cs │ │ ├── CannotStartOcelotTests.cs │ │ ├── CaseSensitiveRoutingTests.cs │ │ ├── ConcurrentSteps.cs │ │ ├── Configuration/ │ │ │ ├── ConfigurationInConsulTests.cs │ │ │ ├── ConfigurationMergeTests.cs │ │ │ ├── ConfigurationReloadTests.cs │ │ │ ├── DownstreamHttpVersionTests.cs │ │ │ └── TimeoutTests.cs │ │ ├── ContentTests.cs │ │ ├── Core/ │ │ │ ├── LoadTests.cs │ │ │ └── ThreadSafeHeadersTests.cs │ │ ├── CustomMiddlewareTests.cs │ │ ├── DefaultVersionPolicyTests.cs │ │ ├── GzipTests.cs │ │ ├── HttpDelegatingHandlersTests.cs │ │ ├── LoadBalancer/ │ │ │ ├── CookieStickySessionsTests.cs │ │ │ ├── ILoadBalancerAnalyzer.cs │ │ │ ├── LeastConnectionAnalyzer.cs │ │ │ ├── LeastConnectionAnalyzerCreator.cs │ │ │ ├── LoadBalancerAnalyzer.cs │ │ │ ├── LoadBalancerTests.cs │ │ │ ├── RoundRobinAnalyzer.cs │ │ │ └── RoundRobinAnalyzerCreator.cs │ │ ├── LogLevelTests.cs │ │ ├── Logging/ │ │ │ ├── MemoryLogger.cs │ │ │ └── TestLoggerFactory.cs │ │ ├── Metadata/ │ │ │ └── DownstreamMetadataTests.cs │ │ ├── Ocelot.AcceptanceTests.csproj │ │ ├── Properties/ │ │ │ ├── AssemblyInfo.cs │ │ │ ├── BddfyConfig.cs │ │ │ └── GlobalSuppressions.cs │ │ ├── QualityOfService/ │ │ │ ├── PollyQoSTests.cs │ │ │ └── QosSteps.cs │ │ ├── RateLimiting/ │ │ │ ├── ClientHeaderRateLimitingTests.cs │ │ │ └── RateLimitingSteps.cs │ │ ├── ReasonPhraseTests.cs │ │ ├── Request/ │ │ │ ├── RequestMapperTests.cs │ │ │ └── StreamContentTests.cs │ │ ├── RequestIdTests.cs │ │ ├── Requester/ │ │ │ ├── MessageInvokerPoolTests.cs │ │ │ ├── PayloadTooLargeTests.cs │ │ │ ├── RequesterSteps.cs │ │ │ ├── TestMessageInvokerPool.cs │ │ │ └── TestTracer.cs │ │ ├── ResponseCodeTests.cs │ │ ├── ReturnsErrorTests.cs │ │ ├── Routing/ │ │ │ ├── RoutingBasedOnHeadersTests.cs │ │ │ ├── RoutingTests.cs │ │ │ ├── RoutingWithQueryStringTests.cs │ │ │ └── UpstreamHostTests.cs │ │ ├── Security/ │ │ │ └── SecurityOptionsTests.cs │ │ ├── SequentialTests.cs │ │ ├── ServiceDiscovery/ │ │ │ ├── ConsulAgentServiceExtensions.cs │ │ │ ├── ConsulConfigurationInConsulTests.cs │ │ │ ├── ConsulIntegrationTests.cs │ │ │ ├── ConsulServiceDiscoveryTests.cs │ │ │ ├── ConsulTwoDownstreamServicesTests.cs │ │ │ ├── ConsulWebSocketTests.cs │ │ │ ├── DynamicRoutingTests.cs │ │ │ ├── EurekaServiceDiscoveryTests.cs │ │ │ ├── KubeIntegrationTests.cs │ │ │ ├── KubernetesServiceDiscoveryTests.cs │ │ │ ├── PollKubeConcurrencyIntegrationTests.cs │ │ │ ├── PollKubeIntegrationTests.cs │ │ │ └── ServiceFabricTests.cs │ │ ├── SslTests.cs │ │ ├── StartupTests.cs │ │ ├── Steps.cs │ │ ├── Transformations/ │ │ │ ├── ClaimsToDownstreamPathTests.cs │ │ │ ├── ClaimsToHeadersForwardingTests.cs │ │ │ ├── ClaimsToQueryStringForwardingTests.cs │ │ │ ├── HeaderTests.cs │ │ │ └── MethodTests.cs │ │ ├── Usings.cs │ │ ├── WebSockets/ │ │ │ ├── ClientWebSocketTests.cs │ │ │ ├── WebSocketsFactoryTests.cs │ │ │ └── WebSocketsSteps.cs │ │ ├── appsettings.json │ │ ├── appsettings.product.json │ │ ├── mycert2.crt │ │ └── packages.lock.json │ ├── Ocelot.Benchmarks/ │ │ ├── AllTheThingsBenchmarks.cs │ │ ├── BenchmarkSteps.cs │ │ ├── DownstreamRouteFinderMiddlewareBenchmarks.cs │ │ ├── ExceptionHandlerMiddlewareBenchmarks.cs │ │ ├── MsLoggerBenchmarks.cs │ │ ├── Ocelot.Benchmarks.csproj │ │ ├── PayloadBenchmarks.cs │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── AssemblyInfo.cs │ │ ├── ResponseBenchmarks.cs │ │ ├── SerilogBenchmarks.cs │ │ ├── UrlPathToUrlPathTemplateMatcherBenchmarks.cs │ │ ├── Usings.cs │ │ └── packages.lock.json │ ├── Ocelot.ManualTest/ │ │ ├── Actions/ │ │ │ ├── Basic.cs │ │ │ └── ManualTests.cs │ │ ├── DelegatingHandlers/ │ │ │ └── FakeHandler.cs │ │ ├── Dockerfile │ │ ├── Middlewares/ │ │ │ └── MetadataMiddleware.cs │ │ ├── Ocelot.ManualTest.csproj │ │ ├── Ocelot.postman_collection.json │ │ ├── Program.cs │ │ ├── Properties/ │ │ │ └── launchSettings.json │ │ ├── Tests/ │ │ │ └── Bug0930.html │ │ ├── Usings.cs │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ ├── docker-compose.yaml │ │ ├── ocelot.identityserver4.json │ │ ├── ocelot.json │ │ ├── packages.lock.json │ │ └── tempkey.rsa │ └── Ocelot.UnitTests/ │ ├── Authentication/ │ │ ├── AuthenticationMiddlewareTests.cs │ │ ├── AuthenticationOptionsCreatorTests.cs │ │ ├── FileAuthenticationOptionsTests.cs │ │ └── FileGlobalAuthenticationOptionsTests.cs │ ├── Authorization/ │ │ ├── AuthorizationMiddlewareTests.cs │ │ ├── ClaimsAuthorizerTests.cs │ │ ├── UnauthorizedErrorTests.cs │ │ └── UserDoesNotHaveClaimErrorTests.cs │ ├── Cache/ │ │ ├── CacheOptionsCreatorTests.cs │ │ ├── CachedResponseTests.cs │ │ ├── DefaultCacheKeyGeneratorTests.cs │ │ ├── DefaultMemoryCacheTests.cs │ │ ├── FileCacheOptionsTests.cs │ │ ├── FileGlobalCacheOptionsTests.cs │ │ └── OutputCacheMiddlewareTests.cs │ ├── Claims/ │ │ ├── AddClaimsToRequestTests.cs │ │ └── ClaimsToClaimsMiddlewareTests.cs │ ├── Configuration/ │ │ ├── AggregatesCreatorTests.cs │ │ ├── ChangeTracking/ │ │ │ ├── OcelotConfigurationChangeTokenSourceTests.cs │ │ │ ├── OcelotConfigurationChangeTokenTests.cs │ │ │ └── OcelotConfigurationMonitorTests.cs │ │ ├── ClaimToThingConfigurationParserTests.cs │ │ ├── ClaimsToThingCreatorTests.cs │ │ ├── ConfigurationCreatorTests.cs │ │ ├── DefaultMetadataCreatorTests.cs │ │ ├── DownstreamAddressesCreatorTests.cs │ │ ├── DownstreamRouteExtensionsTests.cs │ │ ├── DownstreamRouteTests.cs │ │ ├── DynamicRoutesCreatorTests.cs │ │ ├── FileConfigurationSetterTests.cs │ │ ├── FileInternalConfigurationCreatorTests.cs │ │ ├── FileModels/ │ │ │ ├── FileDynamicRouteTests.cs │ │ │ ├── FileGlobalHttpHandlerOptionsTests.cs │ │ │ ├── FileMetadataOptionsTests.cs │ │ │ └── FileRouteTests.cs │ │ ├── HashCreationTests.cs │ │ ├── HeaderFindAndReplaceCreatorTests.cs │ │ ├── HeaderFindAndReplaceTests.cs │ │ ├── HttpHandlerOptionsCreatorTests.cs │ │ ├── HttpHandlerOptionsTests.cs │ │ ├── HttpVersionPolicyCreatorTests.cs │ │ ├── MetadataOptionsTests.cs │ │ ├── Parser/ │ │ │ └── ParsingConfigurationHeaderErrorTests.cs │ │ ├── Repository/ │ │ │ ├── ConsulFileConfigurationPollerOptionTests.cs │ │ │ ├── DiskFileConfigurationRepositoryTests.cs │ │ │ ├── FileConfigurationPollerTests.cs │ │ │ ├── InMemoryConfigurationRepositoryTests.cs │ │ │ └── InMemoryFileConfigurationPollerOptionsTests.cs │ │ ├── RequestIdKeyCreatorTests.cs │ │ ├── RouteKeyCreatorTests.cs │ │ ├── RouteTests.cs │ │ ├── SecurityOptionsCreatorTests.cs │ │ ├── ServiceProviderConfigurationCreatorTests.cs │ │ ├── StaticRoutesCreatorTests.cs │ │ ├── UpstreamHeaderTemplatePatternCreatorTests.cs │ │ ├── UpstreamTemplatePatternCreatorTests.cs │ │ ├── Validation/ │ │ │ ├── FileAuthenticationOptionsValidatorTests.cs │ │ │ ├── FileConfigurationFluentValidatorTests.cs │ │ │ ├── FileQoSOptionsFluentValidatorTests.cs │ │ │ ├── HostAndPortValidatorTests.cs │ │ │ └── RouteFluentValidatorTests.cs │ │ └── VersionCreatorTests.cs │ ├── Consul/ │ │ ├── AgentServiceExtensions.cs │ │ ├── ConsulFileConfigurationRepositoryTests.cs │ │ ├── ConsulProviderFactoryTests.cs │ │ ├── DefaultConsulServiceBuilderTests.cs │ │ ├── OcelotBuilderExtensionsTests.cs │ │ └── PollingConsulServiceDiscoveryProviderTests.cs │ ├── Controllers/ │ │ ├── FileConfigurationControllerTests.cs │ │ └── OutputCacheControllerTests.cs │ ├── DependencyInjection/ │ │ ├── ConfigurationBuilderExtensionsTests.cs │ │ ├── OcelotBuilderTests.cs │ │ └── ServiceCollectionExtensionsTests.cs │ ├── DownstreamPathManipulation/ │ │ ├── ChangeDownstreamPathTemplateTests.cs │ │ └── ClaimsToDownstreamPathMiddlewareTests.cs │ ├── DownstreamRouteFinder/ │ │ ├── DiscoveryDownstreamRouteFinderTests.cs │ │ ├── DownstreamRouteFinderMiddlewareTests.cs │ │ ├── DownstreamRouteFinderTests.cs │ │ ├── DownstreamRouteHolderTests.cs │ │ ├── DownstreamRouteProviderFactoryTests.cs │ │ ├── HeaderMatcher/ │ │ │ ├── HeaderPlaceholderNameAndValueFinderTests.cs │ │ │ └── HeadersToHeaderTemplatesMatcherTests.cs │ │ └── UrlMatcher/ │ │ ├── PlaceholderNameAndValueTests.cs │ │ ├── RegExUrlMatcherTests.cs │ │ └── UrlPathPlaceholderNameAndValueFinderTests.cs │ ├── DownstreamUrlCreator/ │ │ ├── DownstreamPathPlaceholderReplacerTests.cs │ │ └── DownstreamUrlCreatorMiddlewareTests.cs │ ├── Errors/ │ │ ├── ErrorTests.cs │ │ └── ExceptionHandlerMiddlewareTests.cs │ ├── Eureka/ │ │ ├── EurekaMiddlewareConfigurationProviderTests.cs │ │ ├── EurekaProviderFactoryTests.cs │ │ ├── EurekaServiceDiscoveryProviderTests.cs │ │ └── OcelotBuilderExtensionsTests.cs │ ├── FileUnitTest.cs │ ├── Headers/ │ │ ├── AddHeadersToRequestClaimToThingTests.cs │ │ ├── AddHeadersToRequestPlainTests.cs │ │ ├── AddHeadersToResponseTests.cs │ │ ├── ClaimsToHeadersMiddlewareTests.cs │ │ ├── HttpContextRequestHeaderReplacerTests.cs │ │ ├── HttpHeadersTransformationMiddlewareTests.cs │ │ ├── HttpResponseHeaderReplacerTests.cs │ │ └── RemoveHeadersTests.cs │ ├── Infrastructure/ │ │ ├── ClaimParserTests.cs │ │ ├── ConfigAwarePlaceholdersTests.cs │ │ ├── Extensions/ │ │ │ ├── ErrorListExtensionsTests.cs │ │ │ ├── HttpContextExtensionsTests.cs │ │ │ ├── HttpRequestExtensionsTests.cs │ │ │ ├── IEnumerableExtensionsTests.cs │ │ │ ├── Int32ExtensionsTests.cs │ │ │ ├── StringBuilderExtensionsTests.cs │ │ │ └── StringExtensionsTests.cs │ │ ├── HttpDataRepositoryTests.cs │ │ ├── InMemoryBusTests.cs │ │ ├── PlaceholdersTests.cs │ │ └── ScopesAuthorizerTests.cs │ ├── Kubernetes/ │ │ ├── EndpointClientV1Tests.cs │ │ ├── FakeKubeApiClientFactory.cs │ │ ├── KubeApiClientFactoryTests.cs │ │ ├── KubeServiceBuilderTests.cs │ │ ├── KubeServiceCreatorTests.cs │ │ ├── KubernetesProviderFactoryTests.cs │ │ ├── ObservableExtensionsTests.cs │ │ ├── OcelotBuilderExtensionsTests.cs │ │ ├── PollKubeTests.cs │ │ └── WatchKubeTests.cs │ ├── LoadBalancer/ │ │ ├── CookieStickySessionsCreatorTests.cs │ │ ├── CookieStickySessionsTests.cs │ │ ├── DelegateInvokingLoadBalancerCreatorTests.cs │ │ ├── LeaseEventArgsTests.cs │ │ ├── LeaseTests.cs │ │ ├── LeastConnectionCreatorTests.cs │ │ ├── LeastConnectionTests.cs │ │ ├── LoadBalancerFactoryTests.cs │ │ ├── LoadBalancerHouseTests.cs │ │ ├── LoadBalancerMiddlewareTests.cs │ │ ├── LoadBalancerOptionsCreatorTests.cs │ │ ├── LoadBalancerOptionsTests.cs │ │ ├── NoLoadBalancerCreatorTests.cs │ │ ├── NoLoadBalancerTests.cs │ │ ├── RoundRobinCreatorTests.cs │ │ └── RoundRobinTests.cs │ ├── Logging/ │ │ ├── OcelotDiagnosticListenerTests.cs │ │ ├── OcelotHttpTracingHandlerTests.cs │ │ ├── OcelotLoggerFactoryTests.cs │ │ ├── OcelotLoggerTests.cs │ │ ├── OcelotLoggerTestsForDisposal.cs │ │ └── TracingHandlerFactoryTests.cs │ ├── Middleware/ │ │ ├── BaseUrlFinderTests.cs │ │ ├── OcelotPipelineExtensionsTests.cs │ │ └── OcelotPiplineBuilderTests.cs │ ├── Multiplexing/ │ │ ├── DefinedAggregatorProviderTests.cs │ │ ├── MultiplexingMiddlewareTests.cs │ │ ├── ResponseAggregatorFactoryTests.cs │ │ ├── SimpleJsonResponseAggregatorTests.cs │ │ └── UserDefinedResponseAggregatorTests.cs │ ├── Ocelot.UnitTests.csproj │ ├── Polly/ │ │ ├── CircuitBreakerStrategyTests.cs │ │ ├── OcelotBuilderExtensionsTests.cs │ │ ├── PollyQoSResiliencePipelineProviderTests.cs │ │ ├── PollyResiliencePipelineDelegatingHandlerTests.cs │ │ └── TimeoutStrategyTests.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── QualityOfService/ │ │ ├── FileGlobalQoSOptionsTests.cs │ │ ├── FileQoSOptionsTests.cs │ │ ├── QoSFactoryTests.cs │ │ ├── QoSOptionsCreatorTests.cs │ │ └── QoSOptionsTests.cs │ ├── QueryStrings/ │ │ ├── AddQueriesToRequestTests.cs │ │ └── ClaimsToQueryStringMiddlewareTests.cs │ ├── RateLimiting/ │ │ ├── DistributedCacheRateLimitStorageTests.cs │ │ ├── FileGlobalRateLimitingTests.cs │ │ ├── FileRateLimitByHeaderRuleTests.cs │ │ ├── FileRateLimitRuleTests.cs │ │ ├── FileRateLimitingTests.cs │ │ ├── MemoryCacheRateLimitStorageTests.cs │ │ ├── RateLimitCounterTests.cs │ │ ├── RateLimitHeadersTests.cs │ │ ├── RateLimitOptionsCreatorTests.cs │ │ ├── RateLimitOptionsTests.cs │ │ ├── RateLimitRuleTests.cs │ │ ├── RateLimitingHeadersTests.cs │ │ ├── RateLimitingMiddlewareTests.cs │ │ └── RateLimitingTests.cs │ ├── Repository/ │ │ └── HttpDataRepositoryTests.cs │ ├── Request/ │ │ ├── Creator/ │ │ │ └── DownstreamRequestCreatorTests.cs │ │ ├── DownstreamRequestInitialiserMiddlewareTests.cs │ │ ├── DownstreamRequestTests.cs │ │ └── Mapper/ │ │ ├── RequestMapperTests.cs │ │ └── StreamHttpContentTests.cs │ ├── RequestId/ │ │ └── RequestIdMiddlewareTests.cs │ ├── Requester/ │ │ ├── DelegatingHandlerFactoryTests.cs │ │ ├── FakeDelegatingHandler.cs │ │ ├── HttpExceptionToErrorMapperTests.cs │ │ ├── HttpRequesterMiddlewareTests.cs │ │ ├── MessageInvokerCacheKeyTests.cs │ │ ├── MessageInvokerHttpRequesterTests.cs │ │ ├── MessageInvokerPoolTests.cs │ │ └── TimeoutDelegatingHandlerTests.cs │ ├── Responder/ │ │ ├── AnyError.cs │ │ ├── ErrorsToHttpStatusCodeMapperTests.cs │ │ ├── HttpContextResponderTests.cs │ │ └── ResponderMiddlewareTests.cs │ ├── Security/ │ │ ├── IPSecurityPolicyTests.cs │ │ └── SecurityMiddlewareTests.cs │ ├── SequentialTests.cs │ ├── ServiceDiscovery/ │ │ ├── ConfigurationServiceProviderTests.cs │ │ ├── ServiceDiscoveryProviderFactoryTests.cs │ │ ├── ServiceFabricServiceDiscoveryProviderTests.cs │ │ └── ServiceRegistryTests.cs │ ├── TestRetry.cs │ ├── UnitTest.cs │ ├── UnitTests.runsettings │ ├── Usings.cs │ ├── WebSockets/ │ │ ├── ClientWebSocketConnectorTests.cs │ │ ├── ClientWebSocketOptionsProxyTests.cs │ │ ├── ClientWebSocketProxyTests.cs │ │ ├── MockWebSocket.cs │ │ ├── WebSocketsFactoryTests.cs │ │ └── WebSocketsProxyMiddlewareTests.cs │ ├── appsettings.json │ └── packages.lock.json └── testing/ ├── AcceptanceSteps.cs ├── Authentication/ │ ├── AuthenticationSteps.cs │ ├── AuthenticationTokenRequest.cs │ ├── AuthenticationTokenRequestEventArgs.cs │ └── OcelotScopes.cs ├── BearerToken.cs ├── Boxing/ │ ├── Box.cs │ ├── FileRouteBox.cs │ └── FileRouteExtensions.cs ├── FileUnit.cs ├── Ocelot.Testing.csproj ├── Ocelot.cs ├── PortFinder.cs ├── README.md ├── ServiceHandler.cs ├── StreamExtensions.cs ├── TestHostBuilder.cs ├── TestWebBuilder.cs ├── Unit.cs └── Wait.cs