Skip to content

Commit 5067ca6

Browse files
authored
Merge pull request #22 from Cabazure/request-base-address
Change the way request options can affect a request (breaking change)
2 parents 96d0103 + 10ccdc0 commit 5067ca6

File tree

4 files changed

+23
-33
lines changed

4 files changed

+23
-33
lines changed

src/Cabazure.Client.Runtime/Builder/MessageRequestBuilder.cs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class MessageRequestBuilder : IMessageRequestBuilder
1313
private readonly IClientSerializer serializer;
1414
private readonly string clientName;
1515
private string content = string.Empty;
16+
private IRequestOptions? options;
1617

1718
public MessageRequestBuilder(
1819
string template,
@@ -40,6 +41,11 @@ public HttpRequestMessage Build(HttpMethod method)
4041
message.Headers.Add(header.Key, header.Value.ToArray());
4142
}
4243

44+
if (options is not null)
45+
{
46+
options.ConfigureHttpRequest(message);
47+
}
48+
4349
return message;
4450
}
4551

@@ -56,14 +62,7 @@ public IMessageRequestBuilder WithHeader(string name, StringValues value)
5662
public IMessageRequestBuilder WithRequestOptions(
5763
IRequestOptions? options)
5864
{
59-
if (options is { } o)
60-
{
61-
foreach (var header in o.GetHeaders())
62-
{
63-
WithHeader(header.Key, header.Value);
64-
}
65-
}
66-
65+
this.options = options;
6766
return this;
6867
}
6968

@@ -104,7 +103,7 @@ private Uri BuildRequestUri()
104103

105104
if (queryMapper.Count != 0)
106105
{
107-
urlBuilder.Append(template.Contains('?') ? '&': '?');
106+
urlBuilder.Append(template.Contains('?') ? '&' : '?');
108107
urlBuilder.Append(string.Join("&", queryMapper.Select(q => $"{q.Key}={Uri.EscapeDataString(q.Value)}")));
109108
}
110109

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using Microsoft.Extensions.Primitives;
2-
3-
namespace Cabazure.Client;
1+
namespace Cabazure.Client;
42

53
/// <summary>
64
/// Options for a client request.
@@ -19,20 +17,16 @@ public class ClientRequestOptions : IRequestOptions
1917
/// </summary>
2018
public TimeSpan? Timeout { get; set; }
2119

22-
IDictionary<string, StringValues> IRequestOptions.GetHeaders()
20+
void IRequestOptions.ConfigureHttpRequest(HttpRequestMessage request)
2321
{
24-
var headers = new Dictionary<string, StringValues>();
25-
AppendHeaders(headers);
26-
27-
return headers;
22+
ConfigureHttpRequest(request);
2823
}
2924

30-
protected virtual void AppendHeaders(
31-
IDictionary<string, StringValues> headers)
32-
{
25+
protected virtual void ConfigureHttpRequest(HttpRequestMessage request)
26+
{
3327
if (CorrelationId is { } id)
3428
{
35-
headers[HeaderCorrelationId] = id;
29+
request.Headers.TryAddWithoutValidation(HeaderCorrelationId, id);
3630
}
3731
}
3832
}
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using Microsoft.Extensions.Primitives;
2-
3-
namespace Cabazure.Client;
1+
namespace Cabazure.Client;
42

53
public interface IRequestOptions
64
{
@@ -10,8 +8,8 @@ public interface IRequestOptions
108
TimeSpan? Timeout { get; set; }
119

1210
/// <summary>
13-
/// Gets the headers to be sent with the request.
11+
/// Allows the options implementation to configure the HTTP request message.
1412
/// </summary>
15-
/// <returns>Dictionary of header names and header values.</returns>
16-
IDictionary<string, StringValues> GetHeaders();
13+
/// <param name="request">The http request being sent.</param>
14+
void ConfigureHttpRequest(HttpRequestMessage request);
1715
}

src/Cabazure.Client.Runtime/PagedRequestOptions.cs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System.Globalization;
2-
using Microsoft.Extensions.Primitives;
32

43
namespace Cabazure.Client;
54

@@ -21,18 +20,18 @@ public class PagedRequestOptions : ClientRequestOptions
2120
/// </summary>
2221
public string? ContinuationToken { get; set; }
2322

24-
protected override void AppendHeaders(IDictionary<string, StringValues> headers)
23+
protected override void ConfigureHttpRequest(HttpRequestMessage request)
2524
{
26-
base.AppendHeaders(headers);
27-
25+
base.ConfigureHttpRequest(request);
26+
2827
if (MaxItemCount is { } maxItemCount)
2928
{
30-
headers[HeaderMaxItemCount] = maxItemCount.ToString(CultureInfo.InvariantCulture);
29+
request.Headers.TryAddWithoutValidation(HeaderMaxItemCount, maxItemCount.ToString(CultureInfo.InvariantCulture));
3130
}
3231

3332
if (ContinuationToken is { } continuationToken)
3433
{
35-
headers[HeaderContinuation] = continuationToken;
34+
request.Headers.TryAddWithoutValidation(HeaderContinuation, continuationToken);
3635
}
3736
}
3837
}

0 commit comments

Comments
 (0)