Skip to content

Commit 7fad1c4

Browse files
Allow HTTP content headers to be sent
1 parent cae6d48 commit 7fad1c4

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

src/Factory.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,27 @@ public static HttpRequestMessage Message(ToolSettings settings)
4040
Content = new StringContent(settings.Body)
4141
};
4242

43-
foreach (var header in settings.Headers)
43+
var contentHeaders = settings.Headers.Where(h => h == "Allow" || h.StartsWith("Content")).ToArray();
44+
foreach (var header in contentHeaders)
4445
{
4546
var split = header.Split(':');
4647
var name = split[0].Trim();
4748
var value = split[1].Trim();
49+
50+
if (message.Content.Headers.Any(h => h.Key == name))
51+
message.Content.Headers.Remove(name);
52+
message.Content.Headers.Add(name, value);
53+
}
54+
55+
var requestHeaders = settings.Headers.Except(contentHeaders).ToArray();
56+
foreach (var header in requestHeaders)
57+
{
58+
var split = header.Split(':');
59+
var name = split[0].Trim();
60+
var value = split[1].Trim();
61+
62+
if (message.Headers.Any(h => h.Key == name))
63+
message.Headers.Remove(name);
4864
message.Headers.Add(name, value);
4965
}
5066

test/FactoryTests.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public async Task CanCreateComplexMessage()
2525
{
2626
URL = new Uri("http://localhost"),
2727
Method = HttpMethod.Post.Method,
28-
Headers = ["Authorization: Basic a1b2c3d4e5f6"],
28+
Headers = ["Authorization: Basic a1b2c3d4e5f6", "Content-Type: application/json"],
2929
Body = """{"key123":"value456"}"""
3030
};
3131

@@ -36,6 +36,8 @@ public async Task CanCreateComplexMessage()
3636
Assert.Equal(HttpMethod.Post, message.Method);
3737
Assert.Contains("Authorization", message.Headers.Select(h => h.Key));
3838
Assert.Contains("Basic a1b2c3d4e5f6", message.Headers.Select(h => h.Value.FirstOrDefault()));
39+
Assert.Contains("Content-Type", message.Content!.Headers.Select(h => h.Key));
40+
Assert.Contains("application/json", message.Content!.Headers.Select(h => h.Value.FirstOrDefault()));
3941

4042
var json = await JsonSerializer.DeserializeAsync<JsonElement>(await message.Content!.ReadAsStreamAsync());
4143
Assert.Equal("value456", json.GetProperty("key123").GetString());

0 commit comments

Comments
 (0)