diff --git a/Octokit.Tests.Integration/HttpClientAdapterTests.cs b/Octokit.Tests.Integration/HttpClientAdapterTests.cs
index bf4a0fb4..d1b1eb8d 100644
--- a/Octokit.Tests.Integration/HttpClientAdapterTests.cs
+++ b/Octokit.Tests.Integration/HttpClientAdapterTests.cs
@@ -14,7 +14,7 @@ public class HttpClientAdapterTests
[IntegrationTest]
public async Task CanDownloadImage()
{
- var httpClient = new HttpClientAdapter();
+ var httpClient = new HttpClientAdapter(HttpMessageHandlerFactory.GetHandler);
var request = new Request
{
BaseAddress = new Uri("https://github.global.ssl.fastly.net/", UriKind.Absolute),
@@ -36,7 +36,7 @@ public class HttpClientAdapterTests
[IntegrationTest]
public async Task CanCancelARequest()
{
- var httpClient = new HttpClientAdapter();
+ var httpClient = new HttpClientAdapter(HttpMessageHandlerFactory.GetHandler);
var request = new Request
{
BaseAddress = new Uri("https://github.global.ssl.fastly.net/", UriKind.Absolute),
diff --git a/Octokit.Tests/Http/HttpClientAdapterTests.cs b/Octokit.Tests/Http/HttpClientAdapterTests.cs
index a9542cfc..7e77dc91 100644
--- a/Octokit.Tests/Http/HttpClientAdapterTests.cs
+++ b/Octokit.Tests/Http/HttpClientAdapterTests.cs
@@ -178,6 +178,11 @@ namespace Octokit.Tests.Http
sealed class HttpClientAdapterTester : HttpClientAdapter
{
+ public HttpClientAdapterTester()
+ : base (HttpMessageHandlerFactory.GetHandler)
+ {
+ }
+
public HttpRequestMessage BuildRequestMessageTester(IRequest request)
{
return BuildRequestMessage(request);
@@ -187,11 +192,6 @@ namespace Octokit.Tests.Http
{
return await BuildResponse(responseMessage);
}
-
- protected override HttpClientHandler GetHandler()
- {
- return new HttpClientHandler();
- }
}
}
diff --git a/Octokit/GlobalSuppressions.cs b/Octokit/GlobalSuppressions.cs
new file mode 100644
index 00000000..ad01c390
Binary files /dev/null and b/Octokit/GlobalSuppressions.cs differ
diff --git a/Octokit/Http/Connection.cs b/Octokit/Http/Connection.cs
index 39aec59b..3176aff7 100644
--- a/Octokit/Http/Connection.cs
+++ b/Octokit/Http/Connection.cs
@@ -92,7 +92,7 @@ namespace Octokit
/// Provides credentials to the client when making requests
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
public Connection(ProductHeaderValue productInformation, Uri baseAddress, ICredentialStore credentialStore)
- : this(productInformation, baseAddress, credentialStore, new HttpClientAdapter(), new SimpleJsonSerializer())
+ : this(productInformation, baseAddress, credentialStore, new HttpClientAdapter(HttpMessageHandlerFactory.GetHandler), new SimpleJsonSerializer())
{
}
diff --git a/Octokit/Http/HttpClientAdapter.cs b/Octokit/Http/HttpClientAdapter.cs
index ed07dc9d..e394d96c 100644
--- a/Octokit/Http/HttpClientAdapter.cs
+++ b/Octokit/Http/HttpClientAdapter.cs
@@ -18,40 +18,18 @@ namespace Octokit.Internal
///
public class HttpClientAdapter : IHttpClient
{
-#if !PORTABLE
- readonly IWebProxy _webProxy;
-#endif
readonly HttpClient _http;
[SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
[SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
- public HttpClientAdapter()
+ public HttpClientAdapter(Func getHandler)
{
- var handler = GetHandler();
+ Ensure.ArgumentNotNull(getHandler, "getHandler");
+
+ var handler = getHandler();
_http = new HttpClient(new RedirectHandler { InnerHandler = handler });
}
-#if !PORTABLE
- [SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
- [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
- public HttpClientAdapter(IWebProxy webProxy)
- {
- _webProxy = webProxy;
- var handler = GetHandler();
- _http = new HttpClient(new RedirectHandler { InnerHandler = handler });
- }
-
- [SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
- [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
- public HttpClientAdapter(IWebProxy webProxy, HttpMessageHandler handler)
- {
- Ensure.ArgumentNotNull(handler, "handler");
-
- _webProxy = webProxy;
- _http = new HttpClient(new RedirectHandler { InnerHandler = handler});
- }
-#endif
-
///
/// Sends the specified request and returns a response.
///
@@ -89,28 +67,6 @@ namespace Octokit.Internal
return cancellationTokenForRequest;
}
- [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")]
- [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
- protected virtual HttpClientHandler GetHandler()
- {
- var httpOptions = new HttpClientHandler
- {
- AllowAutoRedirect = false
- };
-#if !PORTABLE
- if (httpOptions.SupportsAutomaticDecompression)
- {
- httpOptions.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
- }
- if (httpOptions.SupportsProxy && _webProxy != null)
- {
- httpOptions.UseProxy = true;
- httpOptions.Proxy = _webProxy;
- }
-#endif
- return httpOptions;
- }
-
protected async virtual Task BuildResponse(HttpResponseMessage responseMessage)
{
Ensure.ArgumentNotNull(responseMessage, "responseMessage");
diff --git a/Octokit/Http/HttpMessageHandlerFactory.cs b/Octokit/Http/HttpMessageHandlerFactory.cs
new file mode 100644
index 00000000..3223a38f
--- /dev/null
+++ b/Octokit/Http/HttpMessageHandlerFactory.cs
@@ -0,0 +1,36 @@
+using System.Diagnostics.CodeAnalysis;
+using System.Net;
+using System.Net.Http;
+
+namespace Octokit.Internal
+{
+ public static class HttpMessageHandlerFactory
+ {
+ [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
+ public static HttpClientHandler GetHandler()
+ {
+ return GetHandler(null);
+ }
+
+ [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
+ public static HttpClientHandler GetHandler(IWebProxy proxy)
+ {
+ var handler = new HttpClientHandler
+ {
+ AllowAutoRedirect = false
+ };
+#if !PORTABLE
+ if (handler.SupportsAutomaticDecompression)
+ {
+ handler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
+ }
+ if (handler.SupportsProxy && proxy != null)
+ {
+ handler.UseProxy = true;
+ handler.Proxy = proxy;
+ }
+#endif
+ return handler;
+ }
+ }
+}
diff --git a/Octokit/Octokit-Mono.csproj b/Octokit/Octokit-Mono.csproj
index 4d049e80..5e45258c 100644
--- a/Octokit/Octokit-Mono.csproj
+++ b/Octokit/Octokit-Mono.csproj
@@ -393,6 +393,7 @@
+
\ No newline at end of file
diff --git a/Octokit/Octokit-MonoAndroid.csproj b/Octokit/Octokit-MonoAndroid.csproj
index 4a1ca1f5..fc48cd45 100644
--- a/Octokit/Octokit-MonoAndroid.csproj
+++ b/Octokit/Octokit-MonoAndroid.csproj
@@ -409,6 +409,7 @@
+
\ No newline at end of file
diff --git a/Octokit/Octokit-Monotouch.csproj b/Octokit/Octokit-Monotouch.csproj
index d306f674..4fd43be3 100644
--- a/Octokit/Octokit-Monotouch.csproj
+++ b/Octokit/Octokit-Monotouch.csproj
@@ -402,6 +402,7 @@
+
diff --git a/Octokit/Octokit-Portable.csproj b/Octokit/Octokit-Portable.csproj
index 30be17bc..623668b1 100644
--- a/Octokit/Octokit-Portable.csproj
+++ b/Octokit/Octokit-Portable.csproj
@@ -128,6 +128,7 @@
+
@@ -391,6 +392,7 @@
+
diff --git a/Octokit/Octokit-netcore45.csproj b/Octokit/Octokit-netcore45.csproj
index 38e80b1a..6936868e 100644
--- a/Octokit/Octokit-netcore45.csproj
+++ b/Octokit/Octokit-netcore45.csproj
@@ -395,6 +395,7 @@
+
@@ -410,4 +411,4 @@
-->
-
+
\ No newline at end of file
diff --git a/Octokit/Octokit.csproj b/Octokit/Octokit.csproj
index a3cac0ad..6815ffa1 100644
--- a/Octokit/Octokit.csproj
+++ b/Octokit/Octokit.csproj
@@ -81,6 +81,7 @@
+