diff --git a/src/Ocelot/Configuration/Creator/HttpHandlerOptionsCreator.cs b/src/Ocelot/Configuration/Creator/HttpHandlerOptionsCreator.cs
index 7ce77b34..fbe659cf 100644
--- a/src/Ocelot/Configuration/Creator/HttpHandlerOptionsCreator.cs
+++ b/src/Ocelot/Configuration/Creator/HttpHandlerOptionsCreator.cs
@@ -15,10 +15,10 @@ namespace Ocelot.Configuration.Creator
public HttpHandlerOptions Create(FileHttpHandlerOptions options)
{
- var useTracing = _tracer.GetType() != typeof(FakeServiceTracer) && options.UseTracing;
+ var useTracing = _tracer.GetType() != typeof(FakeServiceTracer) && options.UseTracing;
return new HttpHandlerOptions(options.AllowAutoRedirect,
- options.UseCookieContainer, useTracing);
+ options.UseCookieContainer, useTracing, options.UseProxy);
}
}
}
diff --git a/src/Ocelot/Configuration/File/FileHttpHandlerOptions.cs b/src/Ocelot/Configuration/File/FileHttpHandlerOptions.cs
index 2934254c..e10e7345 100644
--- a/src/Ocelot/Configuration/File/FileHttpHandlerOptions.cs
+++ b/src/Ocelot/Configuration/File/FileHttpHandlerOptions.cs
@@ -5,13 +5,16 @@
public FileHttpHandlerOptions()
{
AllowAutoRedirect = false;
- UseCookieContainer = false;
+ UseCookieContainer = false;
+ UseProxy = true;
}
public bool AllowAutoRedirect { get; set; }
public bool UseCookieContainer { get; set; }
- public bool UseTracing { get; set; }
+ public bool UseTracing { get; set; }
+
+ public bool UseProxy { get; set; }
}
}
diff --git a/src/Ocelot/Configuration/HttpHandlerOptions.cs b/src/Ocelot/Configuration/HttpHandlerOptions.cs
index ef0edd9c..c8f88aa5 100644
--- a/src/Ocelot/Configuration/HttpHandlerOptions.cs
+++ b/src/Ocelot/Configuration/HttpHandlerOptions.cs
@@ -6,11 +6,12 @@
///
public class HttpHandlerOptions
{
- public HttpHandlerOptions(bool allowAutoRedirect, bool useCookieContainer, bool useTracing)
+ public HttpHandlerOptions(bool allowAutoRedirect, bool useCookieContainer, bool useTracing, bool useProxy)
{
AllowAutoRedirect = allowAutoRedirect;
UseCookieContainer = useCookieContainer;
UseTracing = useTracing;
+ UseProxy = useProxy;
}
///
@@ -23,9 +24,14 @@
///
public bool UseCookieContainer { get; private set; }
- //
+ ///
/// Specify is handler has to use a opentracing
///
- public bool UseTracing { get; private set; }
+ public bool UseTracing { get; private set; }
+
+ ///
+ /// Specify if handler has to use a proxy
+ ///
+ public bool UseProxy { get; private set; }
}
}
diff --git a/src/Ocelot/Configuration/HttpHandlerOptionsBuilder.cs b/src/Ocelot/Configuration/HttpHandlerOptionsBuilder.cs
index 1cfd69c6..bf8aa042 100644
--- a/src/Ocelot/Configuration/HttpHandlerOptionsBuilder.cs
+++ b/src/Ocelot/Configuration/HttpHandlerOptionsBuilder.cs
@@ -5,6 +5,7 @@
private bool _allowAutoRedirect;
private bool _useCookieContainer;
private bool _useTracing;
+ private bool _useProxy;
public HttpHandlerOptionsBuilder WithAllowAutoRedirect(bool input)
{
@@ -24,9 +25,15 @@
return this;
}
+ public HttpHandlerOptionsBuilder WithUseProxy(bool useProxy)
+ {
+ _useProxy = useProxy;
+ return this;
+ }
+
public HttpHandlerOptions Build()
{
- return new HttpHandlerOptions(_allowAutoRedirect, _useCookieContainer, _useTracing);
+ return new HttpHandlerOptions(_allowAutoRedirect, _useCookieContainer, _useTracing, _useProxy);
}
}
}
diff --git a/src/Ocelot/Requester/HttpClientBuilder.cs b/src/Ocelot/Requester/HttpClientBuilder.cs
index 1cada3d7..0cd810cf 100644
--- a/src/Ocelot/Requester/HttpClientBuilder.cs
+++ b/src/Ocelot/Requester/HttpClientBuilder.cs
@@ -89,6 +89,7 @@ namespace Ocelot.Requester
{
AllowAutoRedirect = context.DownstreamReRoute.HttpHandlerOptions.AllowAutoRedirect,
UseCookies = context.DownstreamReRoute.HttpHandlerOptions.UseCookieContainer,
+ UseProxy = context.DownstreamReRoute.HttpHandlerOptions.UseProxy
};
}
@@ -98,6 +99,7 @@ namespace Ocelot.Requester
{
AllowAutoRedirect = context.DownstreamReRoute.HttpHandlerOptions.AllowAutoRedirect,
UseCookies = context.DownstreamReRoute.HttpHandlerOptions.UseCookieContainer,
+ UseProxy = context.DownstreamReRoute.HttpHandlerOptions.UseProxy,
CookieContainer = new CookieContainer()
};
}
diff --git a/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs b/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs
index c5bba51c..459976f3 100644
--- a/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs
+++ b/test/Ocelot.UnitTests/Configuration/FileInternalConfigurationCreatorTests.cs
@@ -688,7 +688,7 @@
{
var reRouteOptions = new ReRouteOptionsBuilder()
.Build();
- var httpHandlerOptions = new HttpHandlerOptions(true, true,false);
+ var httpHandlerOptions = new HttpHandlerOptions(true, true,false, true);
this.Given(x => x.GivenTheConfigIs(new FileConfiguration
{
diff --git a/test/Ocelot.UnitTests/Configuration/HttpHandlerOptionsCreatorTests.cs b/test/Ocelot.UnitTests/Configuration/HttpHandlerOptionsCreatorTests.cs
index c86c55d0..94b5413b 100644
--- a/test/Ocelot.UnitTests/Configuration/HttpHandlerOptionsCreatorTests.cs
+++ b/test/Ocelot.UnitTests/Configuration/HttpHandlerOptionsCreatorTests.cs
@@ -35,7 +35,7 @@ namespace Ocelot.UnitTests.Configuration
}
};
- var expectedOptions = new HttpHandlerOptions(false, false, false);
+ var expectedOptions = new HttpHandlerOptions(false, false, false, true);
this.Given(x => GivenTheFollowing(fileReRoute))
.When(x => WhenICreateHttpHandlerOptions())
@@ -54,7 +54,7 @@ namespace Ocelot.UnitTests.Configuration
}
};
- var expectedOptions = new HttpHandlerOptions(false, false, true);
+ var expectedOptions = new HttpHandlerOptions(false, false, true, true);
this.Given(x => GivenTheFollowing(fileReRoute))
.And(x => GivenARealTracer())
@@ -67,7 +67,7 @@ namespace Ocelot.UnitTests.Configuration
public void should_create_options_with_useCookie_false_and_allowAutoRedirect_true_as_default()
{
var fileReRoute = new FileReRoute();
- var expectedOptions = new HttpHandlerOptions(false, false, false);
+ var expectedOptions = new HttpHandlerOptions(false, false, false, true);
this.Given(x => GivenTheFollowing(fileReRoute))
.When(x => WhenICreateHttpHandlerOptions())
@@ -88,7 +88,42 @@ namespace Ocelot.UnitTests.Configuration
}
};
- var expectedOptions = new HttpHandlerOptions(false, false, false);
+ var expectedOptions = new HttpHandlerOptions(false, false, false, true);
+
+ this.Given(x => GivenTheFollowing(fileReRoute))
+ .When(x => WhenICreateHttpHandlerOptions())
+ .Then(x => ThenTheFollowingOptionsReturned(expectedOptions))
+ .BDDfy();
+ }
+
+ [Fact]
+ public void should_create_options_with_useproxy_true_as_default()
+ {
+ var fileReRoute = new FileReRoute
+ {
+ HttpHandlerOptions = new FileHttpHandlerOptions()
+ };
+
+ var expectedOptions = new HttpHandlerOptions(false, false, false, true);
+
+ this.Given(x => GivenTheFollowing(fileReRoute))
+ .When(x => WhenICreateHttpHandlerOptions())
+ .Then(x => ThenTheFollowingOptionsReturned(expectedOptions))
+ .BDDfy();
+ }
+
+ [Fact]
+ public void should_create_options_with_specified_useproxy()
+ {
+ var fileReRoute = new FileReRoute
+ {
+ HttpHandlerOptions = new FileHttpHandlerOptions
+ {
+ UseProxy = false
+ }
+ };
+
+ var expectedOptions = new HttpHandlerOptions(false, false, false, false);
this.Given(x => GivenTheFollowing(fileReRoute))
.When(x => WhenICreateHttpHandlerOptions())
@@ -111,7 +146,8 @@ namespace Ocelot.UnitTests.Configuration
_httpHandlerOptions.ShouldNotBeNull();
_httpHandlerOptions.AllowAutoRedirect.ShouldBe(expected.AllowAutoRedirect);
_httpHandlerOptions.UseCookieContainer.ShouldBe(expected.UseCookieContainer);
- _httpHandlerOptions.UseTracing.ShouldBe(expected.UseTracing);
+ _httpHandlerOptions.UseTracing.ShouldBe(expected.UseTracing);
+ _httpHandlerOptions.UseProxy.ShouldBe(expected.UseProxy);
}
private void GivenARealTracer()
diff --git a/test/Ocelot.UnitTests/Requester/DelegatingHandlerHandlerProviderFactoryTests.cs b/test/Ocelot.UnitTests/Requester/DelegatingHandlerHandlerProviderFactoryTests.cs
index 2ca7a8d5..2882ed8b 100644
--- a/test/Ocelot.UnitTests/Requester/DelegatingHandlerHandlerProviderFactoryTests.cs
+++ b/test/Ocelot.UnitTests/Requester/DelegatingHandlerHandlerProviderFactoryTests.cs
@@ -46,7 +46,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true, true))
.WithDelegatingHandlers(new List
{
"FakeDelegatingHandler",
@@ -82,7 +82,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true, true))
.WithDelegatingHandlers(new List
{
"FakeDelegatingHandlerTwo",
@@ -119,7 +119,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true, true))
.WithDelegatingHandlers(new List
{
"FakeDelegatingHandlerTwo",
@@ -155,7 +155,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true, true))
.WithDelegatingHandlers(new List
{
"FakeDelegatingHandler",
@@ -189,7 +189,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, true, true))
.WithLoadBalancerKey("")
.Build();
@@ -215,7 +215,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false, true))
.WithDelegatingHandlers(new List
{
"FakeDelegatingHandler",
@@ -244,7 +244,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false)).WithLoadBalancerKey("").Build();
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false, true)).WithLoadBalancerKey("").Build();
this.Given(x => GivenTheFollowingRequest(reRoute))
.And(x => GivenTheQosProviderHouseReturns(new OkResponse(It.IsAny())))
@@ -264,7 +264,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false)).WithLoadBalancerKey("").Build();
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false, true)).WithLoadBalancerKey("").Build();
this.Given(x => GivenTheFollowingRequest(reRoute))
.And(x => GivenTheServiceProviderReturnsNothing())
@@ -284,7 +284,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false)).WithLoadBalancerKey("").Build();
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false, true)).WithLoadBalancerKey("").Build();
this.Given(x => GivenTheFollowingRequest(reRoute))
.And(x => GivenTheQosProviderHouseReturns(new OkResponse(It.IsAny())))
@@ -306,7 +306,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false)).WithLoadBalancerKey("").Build();
+ .WithHttpHandlerOptions(new HttpHandlerOptions(true, true, false, true)).WithLoadBalancerKey("").Build();
this.Given(x => GivenTheFollowingRequest(reRoute))
.And(x => GivenTheQosProviderHouseReturns(new ErrorResponse(It.IsAny())))
diff --git a/test/Ocelot.UnitTests/Requester/HttpClientBuilderTests.cs b/test/Ocelot.UnitTests/Requester/HttpClientBuilderTests.cs
index 8b2ae449..1dd70591 100644
--- a/test/Ocelot.UnitTests/Requester/HttpClientBuilderTests.cs
+++ b/test/Ocelot.UnitTests/Requester/HttpClientBuilderTests.cs
@@ -1,10 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Net;
using System.Net.Http;
-using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
@@ -51,7 +49,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().Build())
.Build();
@@ -71,7 +69,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().Build())
.WithDangerousAcceptAnyServerCertificateValidator(true)
@@ -93,7 +91,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().Build())
.Build();
@@ -124,7 +122,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, true, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, true, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().Build())
.Build();
@@ -159,7 +157,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().Build())
.Build();
diff --git a/test/Ocelot.UnitTests/Requester/HttpClientHttpRequesterTest.cs b/test/Ocelot.UnitTests/Requester/HttpClientHttpRequesterTest.cs
index 3530c2b5..ae9a25af 100644
--- a/test/Ocelot.UnitTests/Requester/HttpClientHttpRequesterTest.cs
+++ b/test/Ocelot.UnitTests/Requester/HttpClientHttpRequesterTest.cs
@@ -52,7 +52,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().Build())
.Build();
@@ -78,7 +78,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().Build())
.Build();
@@ -103,7 +103,7 @@ namespace Ocelot.UnitTests.Requester
var reRoute = new DownstreamReRouteBuilder()
.WithQosOptions(qosOptions)
- .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false))
+ .WithHttpHandlerOptions(new HttpHandlerOptions(false, false, false, true))
.WithLoadBalancerKey("")
.WithQosOptions(new QoSOptionsBuilder().WithTimeoutValue(1).Build())
.Build();