diff --git a/src/RestSharp/Request/RequestContent.cs b/src/RestSharp/Request/RequestContent.cs index 9df44d6a9..fd6adaea1 100644 --- a/src/RestSharp/Request/RequestContent.cs +++ b/src/RestSharp/Request/RequestContent.cs @@ -27,9 +27,17 @@ class RequestContent : IDisposable { readonly List _streams = new(); internal static readonly string[] ContentHeaders = { - Allow, Expires, - ContentDisposition, ContentEncoding, ContentLanguage, ContentLength, ContentLocation, ContentRange, ContentType, ContentMD5, - LastModified + Allow.ToLower(), + Expires.ToLower(), + ContentDisposition.ToLower(), + ContentEncoding.ToLower(), + ContentLanguage.ToLower(), + ContentLength.ToLower(), + ContentLocation.ToLower(), + ContentRange.ToLower(), + ContentType.ToLower(), + ContentMD5.ToLower(), + LastModified.ToLower(), }; HttpContent? Content { get; set; } @@ -172,7 +180,7 @@ void AddPostParameters(ParametersCollection? postParameters) { void AddHeaders() { var contentHeaders = _request.Parameters - .Where(x => x.Type == ParameterType.HttpHeader && ContentHeaders.Contains(x.Name)) + .Where(x => x.Type == ParameterType.HttpHeader && ContentHeaders.Contains(x.Name?.ToLower())) .ToArray(); if (contentHeaders.Length > 0 && Content == null) { @@ -208,4 +216,4 @@ public void Dispose() { _streams.ForEach(x => x.Dispose()); Content?.Dispose(); } -} \ No newline at end of file +} diff --git a/test/RestSharp.Tests/RestContentTests.cs b/test/RestSharp.Tests/RestContentTests.cs new file mode 100644 index 000000000..17f80df8d --- /dev/null +++ b/test/RestSharp.Tests/RestContentTests.cs @@ -0,0 +1,18 @@ +using System.Net; + +namespace RestSharp.Tests; + +public class RestContentTests { + [Fact] + public void RestContent_CaseInsensitiveHeaders() { + var myContentType = "application/x-custom"; + var request = new RestRequest("resource"); + request.AddHeader("coNteNt-TypE", myContentType); + var client = new RestClient(); + var content = new RequestContent(client, request); + + var httpContent = content.BuildContent(); + + Assert.Equal(myContentType, httpContent.Headers.ContentType.MediaType); + } +}