Skip to content

Commit aeaba0e

Browse files
authored
add http version middleware (#351)
1 parent b3a369b commit aeaba0e

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

commercetools.Sdk/commercetools.Base.Client/ClientFactory.cs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,27 @@ public static IClient Create(
1717
ISerializerService serializerService,
1818
ITokenProvider tokenProvider,
1919
bool readResponseAsStream = false,
20-
ICorrelationIdProvider correlationIdProvider = null)
20+
ICorrelationIdProvider correlationIdProvider = null,
21+
Version httpVersion = null)
2122
{
2223
Validator.ValidateObject(configuration, new ValidationContext(configuration), true);
2324
if (readResponseAsStream && serializerService is IStreamSerializerService streamSerializer)
2425
{
2526
return new StreamCtpClient(
26-
CreateMiddlewareStack(clientName, configuration, factory, tokenProvider, true, correlationIdProvider),
27+
CreateMiddlewareStack(clientName, configuration, factory, tokenProvider, true, correlationIdProvider, httpVersion),
2728
streamSerializer,
2829
clientName
2930
);
3031
}
3132
return new CtpClient(
32-
CreateMiddlewareStack(clientName, configuration, factory, tokenProvider, false, correlationIdProvider),
33+
CreateMiddlewareStack(clientName, configuration, factory, tokenProvider, false, correlationIdProvider, httpVersion),
3334
serializerService,
3435
clientName
3536
);
3637
}
3738

3839
public static Middleware CreateMiddlewareStack(string clientName, IClientConfiguration configuration,
39-
IHttpClientFactory factory, ITokenProvider tokenProvider, bool readResponseAsStream = false, ICorrelationIdProvider correlationIdProvider = null)
40+
IHttpClientFactory factory, ITokenProvider tokenProvider, bool readResponseAsStream = false, ICorrelationIdProvider correlationIdProvider = null, Version httpVersion = null)
4041
{
4142
var httpClient = factory.CreateClient(clientName);
4243
httpClient.BaseAddress = new Uri(configuration.ApiBaseAddress);
@@ -48,6 +49,10 @@ public static Middleware CreateMiddlewareStack(string clientName, IClientConfigu
4849
correlationIdProvider ?? new DefaultCorrelationIdProvider(configuration)
4950
)
5051
};
52+
if (httpVersion != null)
53+
{
54+
handlers.Add(CreateVersionMiddleware(httpVersion));
55+
}
5156

5257
var httpMiddleware =
5358
readResponseAsStream ? (DelegatingMiddleware)new StreamHttpMiddleware(httpClient) : new HttpMiddleware(httpClient);
@@ -70,5 +75,10 @@ public static CorrelationIdMiddleware CreateCorrelationIdMiddleware(
7075
{
7176
return new CorrelationIdMiddleware(correlationIdProvider);
7277
}
78+
79+
public static VersionMiddleware CreateVersionMiddleware(Version httpVersion)
80+
{
81+
return new VersionMiddleware(httpVersion);
82+
}
7383
}
7484
}

commercetools.Sdk/commercetools.Base.Client/ClientOptions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System;
12
using System.Net;
23

34
namespace commercetools.Base.Client
@@ -8,5 +9,7 @@ public class ClientOptions
89
DecompressionMethods.Deflate | DecompressionMethods.GZip;
910

1011
public bool ReadResponseAsStream { get; set; } = false;
12+
13+
public Version UseHttpVersion { get; set; } = null;
1114
}
1215
}

commercetools.Sdk/commercetools.Base.Client/DependencyInjectionSetup.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ private static IDictionary<string, IHttpClientBuilder> UseMultipleClients(this I
6060
serializerFactory(serviceProvider),
6161
tokenProviderSupplier(clientName, configuration, serviceProvider),
6262
options.ReadResponseAsStream,
63-
serviceProvider.GetService<ICorrelationIdProvider>());
63+
serviceProvider.GetService<ICorrelationIdProvider>(),
64+
options.UseHttpVersion);
6465
client.Name = clientName;
6566
return client;
6667
});
@@ -86,7 +87,8 @@ private static IDictionary<string, IHttpClientBuilder> UseSingleClient(this ISer
8687
serializerFactory(serviceProvider),
8788
tokenProviderSupplier(clientName, configuration, serviceProvider),
8889
options.ReadResponseAsStream,
89-
serviceProvider.GetService<ICorrelationIdProvider>());
90+
serviceProvider.GetService<ICorrelationIdProvider>(),
91+
options.UseHttpVersion);
9092

9193
client.Name = clientName;
9294
return client;
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using System.Net.Http;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
6+
namespace commercetools.Base.Client.Middlewares
7+
{
8+
public class VersionMiddleware: DelegatingMiddleware
9+
{
10+
private readonly Version _httpVersion;
11+
12+
public VersionMiddleware(Version httpVersion)
13+
{
14+
this._httpVersion = httpVersion;
15+
}
16+
17+
protected internal override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
18+
{
19+
request.Version = _httpVersion;
20+
return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
21+
}
22+
23+
}
24+
}

0 commit comments

Comments
 (0)