Fixed Merge Conflicts

This commit is contained in:
Thiago Loureiro 2019-06-01 19:52:34 +08:00
commit 60655c4056
545 changed files with 3522 additions and 3430 deletions

View File

@ -5,7 +5,7 @@ os:
# Ubuntu 14.04
sudo: required
dist: trusty
dist: bionic
# OS X 10.12
osx_image: xcode9.2
@ -13,7 +13,7 @@ osx_image: xcode9.2
mono:
- 5.10.0
dotnet: 2.1.500
dotnet: 2.2.105
before_install:
- git fetch --unshallow # Travis always does a shallow clone, but GitVersion needs the full history including branches and tags

16
Directory.Build.props Normal file
View File

@ -0,0 +1,16 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<RepositoryType>git</RepositoryType>
<RepositoryUrl>https://github.com/ThreeMammals/Ocelot</RepositoryUrl>
<!-- Optional: Publish the repository URL in the built .nupkg (in the NuSpec <Repository> element) -->
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<!-- Optional: Build symbol package (.snupkg) to distribute the PDB containing Source Link -->
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0-beta2-18618-05" PrivateAssets="All"/>
</ItemGroup>
</Project>

View File

@ -1,12 +1,21 @@
[<img src="http://threemammals.com/images/ocelot_logo.png">](http://threemammals.com/ocelot)
[![Build status](https://ci.appveyor.com/api/projects/status/r6sv51qx36sis1je?branch=develop&svg=true)](https://ci.appveyor.com/project/TomPallister/ocelot-fcfpb) Windows (AppVeyor)
[![Build Status](https://travis-ci.org/ThreeMammals/Ocelot.svg?branch=develop)](https://travis-ci.org/ThreeMammals/Ocelot) Linux & OSX (Travis)
[![Build Status](https://dev.azure.com/ThreeMammals/Ocelot/_apis/build/status/Ocelot%20-%20Windows?branchName=develop)](https://dev.azure.com/ThreeMammals/Ocelot/_build/latest?definitionId=4&branchName=develop) Windows
[![Build Status](https://dev.azure.com/ThreeMammals/Ocelot/_apis/build/status/Ocelot%20-%20MacOS?branchName=develop)](https://dev.azure.com/ThreeMammals/Ocelot/_build/latest?definitionId=3&branchName=develop) MacOS
[![Build Status](https://dev.azure.com/ThreeMammals/Ocelot/_apis/build/status/Ocelot%20-%20Linux?branchName=develop)](https://dev.azure.com/ThreeMammals/Ocelot/_build/latest?definitionId=2&branchName=develop) Linux
[![Windows Build history](https://buildstats.info/appveyor/chart/TomPallister/ocelot-fcfpb?branch=develop&includeBuildsFromPullRequest=false)](https://ci.appveyor.com/project/TomPallister/ocelot-fcfpb/history?branch=develop)
[![Coverage Status](https://coveralls.io/repos/github/ThreeMammals/Ocelot/badge.svg?branch=develop)](https://coveralls.io/github/ThreeMammals/Ocelot?branch=develop)
# Ocelot
Ocelot is a .NET API Gateway. This project is aimed at people using .NET running

View File

@ -93,7 +93,7 @@ Then map the authentication provider key to a ReRoute in your configuration e.g.
Identity Server Bearer Tokens
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
In order to use IdentityServer bearer tokens register your IdentityServer services as usual in ConfigureServices with a scheme (key). If you don't understand how to do this please consult the IdentityServer documentation.
In order to use IdentityServer bearer tokens, register your IdentityServer services as usual in ConfigureServices with a scheme (key). If you don't understand how to do this please consult the IdentityServer documentation.
.. code-block:: csharp

View File

@ -26,15 +26,15 @@ Then add the following section to a ReRoute configuration.
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking":3,
"DurationOfBreak":5,
"DurationOfBreak":1000,
"TimeoutValue":5000
}
You must set a number greater than 0 against ExceptionsAllowedBeforeBreaking for this rule to be
implemented. Duration of break is how long the circuit breaker will stay open for after it is tripped.
implemented. Duration of break means the circuit breaker will stay open for 1 second after it is tripped.
TimeoutValue means if a request takes more than 5 seconds it will automatically be timed out.
You can set the TimeoutValue in isoldation of the ExceptionsAllowedBeforeBreaking and DurationOfBreak options.
You can set the TimeoutValue in isolation of the ExceptionsAllowedBeforeBreaking and DurationOfBreak options.
.. code-block:: json

View File

@ -18,9 +18,13 @@ OK so to get rate limiting working for a ReRoute you need to add the following j
}
ClientWhitelist - This is an array that contains the whitelist of the client. It means that the client in this array will not be affected by the rate limiting.
EnableRateLimiting - This value specifies enable endpoint rate limiting.
Period - This value specifies the period that the limit applies to, such as 1s, 5m, 1h,1d and so on. If you make more requests in the period than the limit allows then you need to wait for PeriodTimespan to elapse before you make another request.
PeriodTimespan - This value specifies that we can retry after a certain number of seconds.
Limit - This value specifies the maximum number of requests that a client can make in a defined period.
You can also set the following in the GlobalConfiguration part of ocelot.json
@ -34,7 +38,10 @@ You can also set the following in the GlobalConfiguration part of ocelot.json
"ClientIdHeader" : "Test"
}
DisableRateLimitHeaders - This value specifies whether X-Rate-Limit and Rety-After headers are disabled.
DisableRateLimitHeaders - This value specifies whether X-Rate-Limit and Retry-After headers are disabled.
QuotaExceededMessage - This value specifies the exceeded message.
HttpStatusCode - This value specifies the returned HTTP Status code when rate limiting occurs.
ClientIdHeader - Allows you to specifiy the header that should be used to identify clients. By default it is "ClientId"

View File

@ -37,7 +37,7 @@ The DownstreamPathTemplate, DownstreamScheme and DownstreamHostAndPorts define t
DownstreamHostAndPorts is a collection that defines the host and port of any downstream services that you wish to forward requests to.
Usually this will just contain a single entry but sometimes you might want to load balance requests to your downstream services and Ocelot allows you add more than one entry and then select a load balancer.
The UpstreamPathTemplate is the URL that Ocelot will use to identity which DownstreamPathTemplate to use for a given request.
The UpstreamPathTemplate is the URL that Ocelot will use to identify which DownstreamPathTemplate to use for a given request.
The UpstreamHttpMethod is used so Ocelot can distinguish between requests with different HTTP verbs to the same URL. You can set a specific list of HTTP Methods or set an empty list to allow any of them.
In Ocelot you can add placeholders for variables to your Templates in the form of {something}.

View File

@ -1,6 +0,0 @@
{
"projects": [ "src", "test" ],
"sdk": {
"version": "2.1.500"
}
}

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
@ -15,8 +15,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.9" />
<PackageReference Include="Ocelot" Version="5.5.7" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.2.5" />
<PackageReference Include="Ocelot" Version="13.5.1" />
<PackageReference Include="Ocelot.Provider.Eureka" Version="13.5.1" />
<PackageReference Include="Ocelot.Provider.Polly" Version="13.5.1" />
</ItemGroup>
</Project>

View File

@ -1,4 +1,7 @@
namespace ApiGateway
using Ocelot.Provider.Eureka;
using Ocelot.Provider.Polly;
namespace ApiGateway
{
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
@ -27,7 +30,9 @@
})
.ConfigureServices(s =>
{
s.AddOcelot();
s.AddOcelot()
.AddEureka()
.AddPolly();
})
.Configure(a =>
{

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>
<ItemGroup>
@ -9,7 +9,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.9" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.2.5" />
<PackageReference Include="Steeltoe.Discovery.Client" Version="1.1.0" />
</ItemGroup>

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.28803.452
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OcelotGraphQL", "OcelotGraphQL.csproj", "{5A3220BF-FE0B-4B26-8B2F-37DB7292EEA9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5A3220BF-FE0B-4B26-8B2F-37DB7292EEA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5A3220BF-FE0B-4B26-8B2F-37DB7292EEA9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5A3220BF-FE0B-4B26-8B2F-37DB7292EEA9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5A3220BF-FE0B-4B26-8B2F-37DB7292EEA9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {5762C36C-EA4B-44D9-9DAA-2F7C3FC98692}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,27 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:53639/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"OcelotGraphQL": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:53640/"
}
}
}

View File

@ -1,17 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.1" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.1.1" />
<PackageReference Include="Ocelot" Version="13.6.0-alpha0010"/>
<PackageReference Include="Ocelot.Provider.Kubernetes" Version="13.6.0-alpha0010"/>
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.7.9" />
<PackageReference Include="Ocelot" Version="13.5.1" />
<PackageReference Include="Ocelot.Provider.Kubernetes" Version="13.5.1" />
</ItemGroup>
</Project>

View File

@ -1,10 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;

View File

@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.7.9" />
</ItemGroup>
</Project>

View File

@ -1,11 +1,10 @@
namespace Ocelot.Administration
{
using System.Threading.Tasks;
using Configuration;
using Configuration.Repository;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Ocelot.Middleware;
using System.Threading.Tasks;
public static class IdentityServerMiddlewareConfigurationProvider
{

View File

@ -29,10 +29,10 @@
<ProjectReference Include="..\Ocelot\Ocelot.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2">
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="2.6.0" />
<PackageReference Include="IdentityServer4" Version="2.2.0" />
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="2.7.0" />
<PackageReference Include="IdentityServer4" Version="2.4.0" />
</ItemGroup>
</Project>

View File

@ -1,14 +1,6 @@
namespace Ocelot.Administration
{
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using Configuration;
using Configuration.Creator;
using DependencyInjection;
using IdentityModel;
using IdentityServer4.AccessTokenValidation;
using IdentityServer4.Models;
using Microsoft.AspNetCore.Builder;
@ -16,6 +8,10 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Ocelot.Middleware;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Cryptography.X509Certificates;
public static class OcelotBuilderExtensions
{
@ -61,7 +57,8 @@
{
builder.Services.TryAddSingleton<IIdentityServerConfiguration>(identityServerConfiguration);
var identityServerBuilder = builder.Services
.AddIdentityServer(o => {
.AddIdentityServer(o =>
{
o.IssuerUri = "Ocelot";
})
.AddInMemoryApiResources(Resources(identityServerConfiguration))

View File

@ -28,11 +28,11 @@
<ProjectReference Include="..\Ocelot\Ocelot.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2">
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="CacheManager.Core" Version="1.1.2" />
<PackageReference Include="CacheManager.Microsoft.Extensions.Configuration" Version="1.1.2" />
<PackageReference Include="CacheManager.Microsoft.Extensions.Logging" Version="1.1.2" />
<PackageReference Include="CacheManager.Core" Version="1.2.0" />
<PackageReference Include="CacheManager.Microsoft.Extensions.Configuration" Version="1.2.0" />
<PackageReference Include="CacheManager.Microsoft.Extensions.Logging" Version="1.2.0" />
</ItemGroup>
</Project>

View File

@ -1,12 +1,12 @@
namespace Ocelot.Cache.CacheManager
{
using System;
using Configuration;
using Configuration.File;
using DependencyInjection;
using global::CacheManager.Core;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using System;
public static class OcelotBuilderExtensions
{

View File

@ -1,7 +1,7 @@
namespace Ocelot.Cache.CacheManager
{
using System;
using global::CacheManager.Core;
using System;
public class OcelotCacheManagerCache<T> : IOcelotCache<T>
{

View File

@ -1,16 +1,15 @@
namespace Ocelot.Provider.Consul
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using global::Consul;
using Infrastructure.Extensions;
using Logging;
using ServiceDiscovery.Providers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Values;
public class Consul : IServiceDiscoveryProvider
{
private readonly ConsulRegistryConfiguration _config;
@ -35,7 +34,16 @@
{
if (IsValid(serviceEntry))
{
services.Add(BuildService(serviceEntry));
var nodes = await _consul.Catalog.Nodes();
if (nodes.Response == null)
{
services.Add(BuildService(serviceEntry, null));
}
else
{
var serviceNode = nodes.Response.FirstOrDefault(n => n.Address == serviceEntry.Service.Address);
services.Add(BuildService(serviceEntry, serviceNode));
}
}
else
{
@ -46,11 +54,11 @@
return services.ToList();
}
private Service BuildService(ServiceEntry serviceEntry)
private Service BuildService(ServiceEntry serviceEntry, Node serviceNode)
{
return new Service(
serviceEntry.Service.Service,
new ServiceHostAndPort(serviceEntry.Service.Address, serviceEntry.Service.Port),
new ServiceHostAndPort(serviceNode == null ? serviceEntry.Service.Address : serviceNode.Name, serviceEntry.Service.Port),
serviceEntry.Service.ID,
GetVersionFromStrings(serviceEntry.Service.Tags),
serviceEntry.Service.Tags ?? Enumerable.Empty<string>());

View File

@ -1,7 +1,7 @@
namespace Ocelot.Provider.Consul
{
using System;
using global::Consul;
using System;
public class ConsulClientFactory : IConsulClientFactory
{

View File

@ -1,14 +1,14 @@
namespace Ocelot.Provider.Consul
{
using System;
using System.Text;
using System.Threading.Tasks;
using Configuration.File;
using Configuration.Repository;
using global::Consul;
using Logging;
using Newtonsoft.Json;
using Responses;
using System;
using System.Text;
using System.Threading.Tasks;
public class ConsulFileConfigurationRepository : IFileConfigurationRepository
{

View File

@ -1,8 +1,5 @@
namespace Ocelot.Provider.Consul
{
using System;
using System.Linq;
using System.Threading.Tasks;
using Configuration.Creator;
using Configuration.File;
using Configuration.Repository;
@ -11,6 +8,9 @@
using Microsoft.Extensions.Options;
using Middleware;
using Responses;
using System;
using System.Linq;
using System.Threading.Tasks;
public static class ConsulMiddlewareConfigurationProvider
{

View File

@ -1,8 +1,6 @@
namespace Ocelot.Provider.Consul
{
using System.Threading.Tasks;
using Logging;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using ServiceDiscovery;

View File

@ -30,7 +30,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Consul" Version="0.7.2.6" />
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2">
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@ -3,6 +3,7 @@
using Configuration.Repository;
using DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Middleware;
using ServiceDiscovery;
@ -12,6 +13,8 @@
{
builder.Services.AddSingleton<ServiceDiscoveryFinderDelegate>(ConsulProviderFactory.Get);
builder.Services.AddSingleton<IConsulClientFactory, ConsulClientFactory>();
builder.Services.RemoveAll(typeof(IFileConfigurationPollerOptions));
builder.Services.AddSingleton<IFileConfigurationPollerOptions, ConsulFileConfigurationPollerOption>();
return builder;
}

View File

@ -1,10 +1,10 @@
namespace Ocelot.Provider.Consul
{
using Logging;
using ServiceDiscovery.Providers;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Logging;
using ServiceDiscovery.Providers;
using Values;
public class PollConsul : IServiceDiscoveryProvider

View File

@ -1,10 +1,10 @@
namespace Ocelot.Provider.Eureka
{
using ServiceDiscovery.Providers;
using Steeltoe.Common.Discovery;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ServiceDiscovery.Providers;
using Steeltoe.Common.Discovery;
using Values;
public class Eureka : IServiceDiscoveryProvider

View File

@ -1,11 +1,11 @@
namespace Ocelot.Provider.Eureka
{
using System.Threading.Tasks;
using Configuration;
using Configuration.Repository;
using Microsoft.Extensions.DependencyInjection;
using Middleware;
using Steeltoe.Discovery.Client;
using System.Threading.Tasks;
public class EurekaMiddlewareConfigurationProvider
{

View File

@ -2,7 +2,6 @@
{
using Microsoft.Extensions.DependencyInjection;
using ServiceDiscovery;
using ServiceDiscovery.Providers;
using Steeltoe.Common.Discovery;
public static class EurekaProviderFactory

View File

@ -30,7 +30,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Steeltoe.Discovery.ClientCore" Version="2.2.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2">
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@ -1,12 +1,12 @@
namespace Ocelot.Provider.Eureka
{
using System.Linq;
using DependencyInjection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Middleware;
using Steeltoe.Discovery.Client;
using ServiceDiscovery;
using Steeltoe.Discovery.Client;
using System.Linq;
public static class OcelotBuilderExtensions
{

View File

@ -1,7 +1,4 @@
using KubeClient;
using System;
namespace Ocelot.Provider.Kubernetes
namespace Ocelot.Provider.Kubernetes
{
public class KubeRegistryConfiguration
{

View File

@ -30,8 +30,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="KubeClient" Version="2.2.11" />
<PackageReference Include="KubeClient.Extensions.DependencyInjection" Version="2.2.11" />
<PackageReference Include="KubeClient" Version="2.2.12" />
<PackageReference Include="KubeClient.Extensions.DependencyInjection" Version="2.2.12" />
</ItemGroup>
<ItemGroup>

View File

@ -1,8 +1,6 @@
using Polly;
using System.Collections.Generic;
using System.Linq;
using Polly;
using Polly.CircuitBreaker;
using Polly.Timeout;
namespace Ocelot.Provider.Polly
{

View File

@ -29,9 +29,9 @@
<ProjectReference Include="..\Ocelot\Ocelot.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2">
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Polly" Version="6.0.1" />
<PackageReference Include="Polly" Version="7.1.0" />
</ItemGroup>
</Project>

View File

@ -1,9 +1,5 @@
namespace Ocelot.Provider.Polly
{
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Configuration;
using DependencyInjection;
using Errors;
@ -12,6 +8,10 @@
using Logging;
using Microsoft.Extensions.DependencyInjection;
using Requester;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
public static class OcelotBuilderExtensions
{
@ -31,7 +31,7 @@
return new PollyCircuitBreakingDelegatingHandler(new PollyQoSProvider(reRoute, logger), logger);
}
builder.Services.AddSingleton((QosDelegatingHandlerDelegate) QosDelegatingHandlerDelegate);
builder.Services.AddSingleton((QosDelegatingHandlerDelegate)QosDelegatingHandlerDelegate);
return builder;
}
}

View File

@ -1,9 +1,9 @@
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Ocelot.Logging;
using Polly;
using Polly.CircuitBreaker;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
namespace Ocelot.Provider.Polly
{
@ -26,11 +26,11 @@ namespace Ocelot.Provider.Polly
{
return await Policy
.WrapAsync(_qoSProvider.CircuitBreaker.Policies)
.ExecuteAsync(() => base.SendAsync(request,cancellationToken));
.ExecuteAsync(() => base.SendAsync(request, cancellationToken));
}
catch (BrokenCircuitException ex)
{
_logger.LogError($"Reached to allowed number of exceptions. Circuit is open",ex);
_logger.LogError($"Reached to allowed number of exceptions. Circuit is open", ex);
throw;
}
catch (HttpRequestException ex)

View File

@ -1,17 +1,17 @@
namespace Ocelot.Provider.Polly
{
using System;
using System.Net.Http;
using global::Polly;
using global::Polly.CircuitBreaker;
using global::Polly.Timeout;
using Ocelot.Configuration;
using Ocelot.Logging;
using System;
using System.Net.Http;
public class PollyQoSProvider
{
private readonly CircuitBreakerPolicy _circuitBreakerPolicy;
private readonly TimeoutPolicy _timeoutPolicy;
private readonly AsyncCircuitBreakerPolicy _circuitBreakerPolicy;
private readonly AsyncTimeoutPolicy _timeoutPolicy;
private readonly IOcelotLogger _logger;
public PollyQoSProvider(DownstreamReRoute reRoute, IOcelotLoggerFactory loggerFactory)

View File

@ -1,7 +1,7 @@
namespace Ocelot.Provider.Polly
{
using System;
using Errors;
using System;
public class RequestTimedOutError : Error
{

View File

@ -1,14 +1,13 @@
namespace Ocelot.Provider.Rafty
{
using System.Net.Http;
using Configuration;
using Administration;
using Configuration.Repository;
using global::Rafty.Concensus.Peers;
using global::Rafty.Infrastructure;
using Microsoft.Extensions.Options;
using Middleware;
using System.Collections.Generic;
using Administration;
using System.Net.Http;
public class FilePeersProvider : IPeersProvider
{

View File

@ -1,7 +1,6 @@
namespace Ocelot.Provider.Rafty
{
using System.Net.Http;
using System.Threading.Tasks;
using Administration;
using Configuration;
using global::Rafty.Concensus.Messages;
using global::Rafty.Concensus.Peers;
@ -11,7 +10,8 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using Administration;
using System.Net.Http;
using System.Threading.Tasks;
public class HttpPeer : IPeer
{

View File

@ -30,9 +30,9 @@
<ProjectReference Include="..\Ocelot.Administration\Ocelot.Administration.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.SQLite" Version="2.2.0"/>
<PackageReference Include="Rafty" Version="0.4.4"/>
<PackageReference Include="StyleCop.Analyzers" Version="1.0.2">
<PackageReference Include="Microsoft.Data.SQLite" Version="2.2.4" />
<PackageReference Include="Rafty" Version="0.4.4" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

View File

@ -1,9 +1,9 @@
namespace Ocelot.Provider.Rafty
{
using System.Threading.Tasks;
using Configuration.Setter;
using global::Rafty.FiniteStateMachine;
using global::Rafty.Log;
using System.Threading.Tasks;
public class OcelotFiniteStateMachine : IFiniteStateMachine
{

View File

@ -1,8 +1,5 @@
namespace Ocelot.Provider.Rafty
{
using System;
using System.IO;
using System.Threading.Tasks;
using global::Rafty.Concensus.Messages;
using global::Rafty.Concensus.Node;
using global::Rafty.FiniteStateMachine;
@ -11,6 +8,9 @@
using Microsoft.AspNetCore.Mvc;
using Middleware;
using Newtonsoft.Json;
using System;
using System.IO;
using System.Threading.Tasks;
[Authorize]
[Route("raft")]

View File

@ -1,10 +1,10 @@
namespace Ocelot.Provider.Rafty
{
using System.Threading.Tasks;
using Configuration.File;
using Configuration.Setter;
using global::Rafty.Concensus.Node;
using global::Rafty.Infrastructure;
using System.Threading.Tasks;
public class RaftyFileConfigurationSetter : IFileConfigurationSetter
{

View File

@ -1,12 +1,12 @@
namespace Ocelot.Provider.Rafty
{
using System.Threading.Tasks;
using global::Rafty.Concensus.Node;
using global::Rafty.Infrastructure;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Middleware;
using Microsoft.AspNetCore.Hosting;
using System.Threading.Tasks;
public static class RaftyMiddlewareConfigurationProvider
{

View File

@ -1,15 +1,15 @@
namespace Ocelot.Provider.Rafty
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using global::Rafty.Infrastructure;
using global::Rafty.Log;
using Microsoft.Data.Sqlite;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
public class SqlLiteLog : ILog
{

View File

@ -1,6 +1,7 @@
namespace Ocelot.Provider.Rafty
{
using Errors;
public class UnableToSaveAcceptCommand : Error
{
public UnableToSaveAcceptCommand(string message)

View File

@ -1,17 +1,17 @@
namespace Ocelot.Tracing.Butterfly
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using global::Butterfly.Client.AspNetCore;
using global::Butterfly.Client.Tracing;
using global::Butterfly.OpenTracing;
using Infrastructure.Extensions;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
public class ButterflyTracer : DelegatingHandler, Logging.ITracer
{

View File

@ -1,10 +1,10 @@
namespace Ocelot.Tracing.Butterfly
{
using System;
using DependencyInjection;
using global::Butterfly.Client.AspNetCore;
using Logging;
using Microsoft.Extensions.DependencyInjection;
using System;
public static class OcelotBuilderExtensions
{

View File

@ -1,11 +1,8 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication;
using Ocelot.Configuration;
using Ocelot.Errors;
using Ocelot.Infrastructure.Extensions;
using Ocelot.Logging;
using Ocelot.Middleware;
using System.Threading.Tasks;
namespace Ocelot.Authentication.Middleware
{

View File

@ -1,14 +1,10 @@
using System;
using Ocelot.DownstreamRouteFinder.UrlMatcher;
using Ocelot.Responses;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Text.RegularExpressions;
using Ocelot.DownstreamRouteFinder.UrlMatcher;
using Ocelot.Middleware;
using Ocelot.Responses;
using Ocelot.Values;
namespace Ocelot.Authorisation
{
using Infrastructure.Claims.Parser;
@ -26,7 +22,8 @@ namespace Ocelot.Authorisation
ClaimsPrincipal claimsPrincipal,
Dictionary<string, string> routeClaimsRequirement,
List<PlaceholderNameAndValue> urlPathPlaceholderNameAndValues
){
)
{
foreach (var required in routeClaimsRequirement)
{
var values = _claimsParser.GetValuesByClaimType(claimsPrincipal.Claims, required.Key);
@ -62,15 +59,14 @@ namespace Ocelot.Authorisation
if (matchingPlaceholders.Length == 0)
{
return new ErrorResponse<bool>(new ClaimValueNotAuthorisedError(
$"config error: requires variable claim value: {variableName} placeholders does not contain that variable: {string.Join(", ", urlPathPlaceholderNameAndValues.Select(p=>p.Name))}"));
$"config error: requires variable claim value: {variableName} placeholders does not contain that variable: {string.Join(", ", urlPathPlaceholderNameAndValues.Select(p => p.Name))}"));
}
else
{
return new ErrorResponse<bool>(new ClaimValueNotAuthorisedError(
$"config error: requires variable claim value: {required.Value} but placeholders are ambiguous: {string.Join(", ", urlPathPlaceholderNameAndValues.Where(p=>p.Name.Equals(variableName)).Select(p => p.Value))}"));
$"config error: requires variable claim value: {required.Value} but placeholders are ambiguous: {string.Join(", ", urlPathPlaceholderNameAndValues.Where(p => p.Name.Equals(variableName)).Select(p => p.Value))}"));
}
}
}
else
{

View File

@ -1,9 +1,6 @@
using System.Security.Claims;
using Ocelot.Configuration;
using Ocelot.DownstreamRouteFinder.UrlMatcher;
using Ocelot.DownstreamRouteFinder.UrlMatcher;
using Ocelot.Responses;
using Ocelot.Values;
using System.Security.Claims;
namespace Ocelot.Authorisation
{

View File

@ -1,5 +1,5 @@
using System.Security.Claims;
using Ocelot.Responses;
using Ocelot.Responses;
using System.Security.Claims;
namespace Ocelot.Authorisation
{

View File

@ -1,12 +1,10 @@
namespace Ocelot.Authorisation.Middleware
{
using System.Collections.Generic;
using System.Threading.Tasks;
using Errors;
using Ocelot.Middleware;
using Logging;
using Responses;
using Configuration;
using Logging;
using Ocelot.Middleware;
using Responses;
using System.Threading.Tasks;
public class AuthorisationMiddleware : OcelotMiddleware
{
@ -18,7 +16,7 @@
IClaimsAuthoriser claimsAuthoriser,
IScopesAuthoriser scopesAuthoriser,
IOcelotLoggerFactory loggerFactory)
:base(loggerFactory.CreateLogger<AuthorisationMiddleware>())
: base(loggerFactory.CreateLogger<AuthorisationMiddleware>())
{
_next = next;
_claimsAuthoriser = claimsAuthoriser;

View File

@ -1,7 +1,7 @@
using Ocelot.Responses;
using System.Collections.Generic;
using System.Security.Claims;
using System.Linq;
using System.Security.Claims;
namespace Ocelot.Authorisation
{

View File

@ -1,13 +1,17 @@
using System.Text;
using Ocelot.Middleware;
using System.Text;
using System.Threading.Tasks;
using Ocelot.Middleware;
namespace Ocelot.Cache {
public class CacheKeyGenerator : ICacheKeyGenerator {
public string GenerateRequestCacheKey(DownstreamContext context) {
namespace Ocelot.Cache
{
public class CacheKeyGenerator : ICacheKeyGenerator
{
public string GenerateRequestCacheKey(DownstreamContext context)
{
string hashedContent = null;
StringBuilder downStreamUrlKeyBuilder = new StringBuilder($"{context.DownstreamRequest.Method}-{context.DownstreamRequest.OriginalString}");
if (context.DownstreamRequest.Content != null) {
if (context.DownstreamRequest.Content != null)
{
string requestContentString = Task.Run(async () => await context.DownstreamRequest.Content.ReadAsStringAsync()).Result;
downStreamUrlKeyBuilder.Append(requestContentString);
}

View File

@ -2,7 +2,7 @@
{
using System;
class CacheObject<T>
internal class CacheObject<T>
{
public CacheObject(T value, DateTime expires)
{

View File

@ -1,7 +1,9 @@
using Ocelot.Middleware;
namespace Ocelot.Cache {
public interface ICacheKeyGenerator {
namespace Ocelot.Cache
{
public interface ICacheKeyGenerator
{
string GenerateRequestCacheKey(DownstreamContext context);
}
}

View File

@ -5,8 +5,11 @@ namespace Ocelot.Cache
public interface IOcelotCache<T>
{
void Add(string key, T value, TimeSpan ttl, string region);
T Get(string key, string region);
void ClearRegion(string region);
void AddAndDelete(string key, T value, TimeSpan ttl, string region);
}
}

View File

@ -35,7 +35,7 @@
}
else
{
_regions.Add(region, new List<string>{ key });
_regions.Add(region, new List<string> { key });
}
}

View File

@ -1,20 +1,25 @@
using System.Security.Cryptography;
using System.Text;
namespace Ocelot.Cache {
public static class MD5Helper {
public static string GenerateMd5(byte[] contentBytes) {
namespace Ocelot.Cache
{
public static class MD5Helper
{
public static string GenerateMd5(byte[] contentBytes)
{
MD5 md5 = MD5.Create();
byte[] hash = md5.ComputeHash(contentBytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hash.Length; i++) {
for (int i = 0; i < hash.Length; i++)
{
sb.Append(hash[i].ToString("X2"));
}
return sb.ToString();
}
public static string GenerateMd5(string contentString) {
public static string GenerateMd5(string contentString)
{
byte[] contentBytes = Encoding.Unicode.GetBytes(contentString);
return GenerateMd5(contentBytes);
}

View File

@ -1,13 +1,13 @@
namespace Ocelot.Cache.Middleware
{
using System;
using System.Linq;
using System.Net.Http;
using System.Threading.Tasks;
using Ocelot.Logging;
using Ocelot.Middleware;
using System;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
public class OutputCacheMiddleware : OcelotMiddleware
{
@ -19,7 +19,7 @@
IOcelotLoggerFactory loggerFactory,
IOcelotCache<CachedResponse> outputCache,
ICacheKeyGenerator cacheGeneratot)
:base(loggerFactory.CreateLogger<OutputCacheMiddleware>())
: base(loggerFactory.CreateLogger<OutputCacheMiddleware>())
{
_next = next;
_outputCache = outputCache;
@ -77,6 +77,20 @@
context.DownstreamResponse = response;
}
private string GenerateRequestCacheKey(DownstreamContext context)
{
string hashedContent = null;
StringBuilder downStreamUrlKeyBuilder = new StringBuilder($"{context.DownstreamRequest.Method}-{context.DownstreamRequest.OriginalString}");
if (context.DownstreamRequest.Content != null)
{
string requestContentString = Task.Run(async () => await context.DownstreamRequest.Content?.ReadAsStringAsync()).Result;
downStreamUrlKeyBuilder.Append(requestContentString);
}
hashedContent = MD5Helper.GenerateMd5(downStreamUrlKeyBuilder.ToString());
return hashedContent;
}
internal DownstreamResponse CreateHttpResponseMessage(CachedResponse cached)
{
if (cached == null)

View File

@ -1,6 +1,5 @@
using System.Linq;
using Ocelot.Configuration;
using Ocelot.Configuration.File;
using System.Linq;
namespace Ocelot.Cache
{
@ -8,7 +7,7 @@ namespace Ocelot.Cache
{
public string Create(FileReRoute reRoute)
{
if(!string.IsNullOrEmpty(reRoute?.FileCacheOptions?.Region))
if (!string.IsNullOrEmpty(reRoute?.FileCacheOptions?.Region))
{
return reRoute?.FileCacheOptions?.Region;
}

View File

@ -1,10 +1,10 @@
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http;
using Ocelot.Configuration;
using Ocelot.Infrastructure.Claims.Parser;
using Ocelot.Responses;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
namespace Ocelot.Claims
{

View File

@ -1,7 +1,7 @@
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http;
using Ocelot.Configuration;
using Ocelot.Responses;
using System.Collections.Generic;
namespace Ocelot.Claims
{

View File

@ -1,10 +1,7 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Ocelot.DownstreamRouteFinder.Middleware;
using Ocelot.Infrastructure.RequestData;
using Ocelot.Logging;
using Ocelot.Logging;
using Ocelot.Middleware;
using System.Linq;
using System.Threading.Tasks;
namespace Ocelot.Claims.Middleware
{
@ -16,7 +13,7 @@ namespace Ocelot.Claims.Middleware
public ClaimsToClaimsMiddleware(OcelotRequestDelegate next,
IOcelotLoggerFactory loggerFactory,
IAddClaimsToRequest addClaimsToRequest)
:base(loggerFactory.CreateLogger<ClaimsToClaimsMiddleware>())
: base(loggerFactory.CreateLogger<ClaimsToClaimsMiddleware>())
{
_next = next;
_addClaimsToRequest = addClaimsToRequest;

View File

@ -1,8 +1,8 @@
using System.Collections.Generic;
using System.Net.Http;
using Ocelot.Values;
using System.Linq;
using Ocelot.Configuration.Creator;
using Ocelot.Values;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
namespace Ocelot.Configuration.Builder
{
@ -39,6 +39,7 @@ namespace Ocelot.Configuration.Builder
private List<AddHeader> _addHeadersToUpstream;
private bool _dangerousAcceptAnyServerCertificateValidator;
private SecurityOptions _securityOptions;
public DownstreamReRouteBuilder()
{
_downstreamAddresses = new List<DownstreamHostAndPort>();

View File

@ -1,10 +1,10 @@
namespace Ocelot.Configuration.Builder
{
using System.Collections.Generic;
using System.Net.Http;
using Ocelot.Values;
using System.Linq;
using Ocelot.Configuration.File;
using Ocelot.Values;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
public class ReRouteBuilder
{

View File

@ -1,9 +1,9 @@
namespace Ocelot.Configuration.Creator
{
using System.Collections.Generic;
using System.Linq;
using Builder;
using File;
using System.Collections.Generic;
using System.Linq;
public class AggregatesCreator : IAggregatesCreator
{

View File

@ -1,6 +1,6 @@
using System.Collections.Generic;
using Ocelot.Configuration.Parser;
using Ocelot.Logging;
using System.Collections.Generic;
namespace Ocelot.Configuration.Creator
{
@ -16,7 +16,7 @@ namespace Ocelot.Configuration.Creator
_claimToThingConfigParser = claimToThingConfigurationParser;
}
public List<ClaimToThing> Create(Dictionary<string,string> inputToBeParsed)
public List<ClaimToThing> Create(Dictionary<string, string> inputToBeParsed)
{
var claimsToThings = new List<ClaimToThing>();

View File

@ -1,10 +1,10 @@
namespace Ocelot.Configuration.Creator
{
using DependencyInjection;
using File;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using File;
using DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
public class ConfigurationCreator : IConfigurationCreator
{

View File

@ -1,6 +1,6 @@
using Ocelot.Configuration.File;
using System.Collections.Generic;
using System.Linq;
using Ocelot.Configuration.File;
namespace Ocelot.Configuration.Creator
{

View File

@ -1,9 +1,9 @@
namespace Ocelot.Configuration.Creator
{
using System.Collections.Generic;
using System.Linq;
using Builder;
using File;
using System.Collections.Generic;
using System.Linq;
public class DynamicsCreator : IDynamicsCreator
{

View File

@ -1,10 +1,10 @@
namespace Ocelot.Configuration.Creator
{
using File;
using Responses;
using System.Linq;
using System.Threading.Tasks;
using File;
using Validator;
using Responses;
public class FileInternalConfigurationCreator : IInternalConfigurationCreator
{

View File

@ -1,11 +1,9 @@
using System;
using System.Collections.Generic;
using Ocelot.Configuration.File;
using Ocelot.Infrastructure;
using Ocelot.Infrastructure.Extensions;
using Ocelot.Logging;
using Ocelot.Middleware;
using Ocelot.Responses;
using System.Collections.Generic;
namespace Ocelot.Configuration.Creator
{
@ -25,7 +23,7 @@ namespace Ocelot.Configuration.Creator
var upstream = new List<HeaderFindAndReplace>();
var addHeadersToUpstream = new List<AddHeader>();
foreach(var input in fileReRoute.UpstreamHeaderTransform)
foreach (var input in fileReRoute.UpstreamHeaderTransform)
{
if (input.Value.Contains(","))
{
@ -48,12 +46,12 @@ namespace Ocelot.Configuration.Creator
var downstream = new List<HeaderFindAndReplace>();
var addHeadersToDownstream = new List<AddHeader>();
foreach(var input in fileReRoute.DownstreamHeaderTransform)
foreach (var input in fileReRoute.DownstreamHeaderTransform)
{
if(input.Value.Contains(","))
if (input.Value.Contains(","))
{
var hAndr = Map(input);
if(!hAndr.IsError)
if (!hAndr.IsError)
{
downstream.Add(hAndr.Data);
}
@ -71,14 +69,14 @@ namespace Ocelot.Configuration.Creator
return new HeaderTransformations(upstream, downstream, addHeadersToDownstream, addHeadersToUpstream);
}
private Response<HeaderFindAndReplace> Map(KeyValuePair<string,string> input)
private Response<HeaderFindAndReplace> Map(KeyValuePair<string, string> input)
{
var findAndReplace = input.Value.Split(",");
var replace = findAndReplace[1].TrimStart();
var startOfPlaceholder = replace.IndexOf("{");
if(startOfPlaceholder > -1)
if (startOfPlaceholder > -1)
{
var endOfPlaceholder = replace.IndexOf("}", startOfPlaceholder);
@ -86,7 +84,7 @@ namespace Ocelot.Configuration.Creator
var value = _placeholders.Get(placeholder);
if(value.IsError)
if (value.IsError)
{
return new ErrorResponse<HeaderFindAndReplace>(value.Errors);
}

View File

@ -1,9 +1,9 @@
namespace Ocelot.Configuration.Creator
{
using System;
using Logging;
using Microsoft.Extensions.DependencyInjection;
using Ocelot.Configuration.File;
using System;
public class HttpHandlerOptionsCreator : IHttpHandlerOptionsCreator
{
@ -16,7 +16,7 @@
public HttpHandlerOptions Create(FileHttpHandlerOptions options)
{
var useTracing = _tracer!= null && options.UseTracing;
var useTracing = _tracer != null && options.UseTracing;
return new HttpHandlerOptions(options.AllowAutoRedirect,
options.UseCookieContainer, useTracing, options.UseProxy);

View File

@ -1,5 +1,5 @@
using System.Collections.Generic;
using Ocelot.Configuration.File;
using System.Collections.Generic;
namespace Ocelot.Configuration.Creator
{

View File

@ -1,4 +1,3 @@
using System.Collections.Generic;
using Ocelot.Configuration.File;
namespace Ocelot.Configuration.Creator

Some files were not shown because too many files have changed in this diff Show More