From be3a2fb6ed5c83ca8c1f658d31d6f2770cd4e2aa Mon Sep 17 00:00:00 2001 From: "tom.pallister" Date: Fri, 28 Apr 2017 13:04:40 +0100 Subject: [PATCH] Change to fix issue not setting content type header --- src/Ocelot/Request/Mapper/RequestMapper.cs | 7 ++++- .../Request/Mapper/RequestMapperTests.cs | 29 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Ocelot/Request/Mapper/RequestMapper.cs b/src/Ocelot/Request/Mapper/RequestMapper.cs index 17e2afe50..57925920d 100644 --- a/src/Ocelot/Request/Mapper/RequestMapper.cs +++ b/src/Ocelot/Request/Mapper/RequestMapper.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Net.Http; + using System.Net.Http.Headers; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; @@ -44,7 +45,11 @@ private async Task MapContent(HttpRequest request) return null; } - return new ByteArrayContent(await ToByteArray(request.Body)); + var content = new ByteArrayContent(await ToByteArray(request.Body)); + + content.Headers.TryAddWithoutValidation("Content-Type", new[] {request.ContentType}); + + return content; } private HttpMethod MapMethod(HttpRequest request) diff --git a/test/Ocelot.UnitTests/Request/Mapper/RequestMapperTests.cs b/test/Ocelot.UnitTests/Request/Mapper/RequestMapperTests.cs index 4334e0179..ca086c22f 100644 --- a/test/Ocelot.UnitTests/Request/Mapper/RequestMapperTests.cs +++ b/test/Ocelot.UnitTests/Request/Mapper/RequestMapperTests.cs @@ -117,6 +117,35 @@ public void Should_map_content() .BDDfy(); } + [Fact] + public void Should_map_content_type_header() + { + this.Given(_ => GivenTheInputRequestHasContent("This is my content")) + .And(_ => GivenTheContentTypeIs("application/json")) + .And(_ => GivenTheInputRequestHasMethod("GET")) + .And(_ => GivenTheInputRequestHasAValidUri()) + .When(_ => WhenMapped()) + .Then(_ => ThenNoErrorIsReturned()) + .And(_ => ThenTheMappedRequestHasContentTypeHeader("application/json")) + .And(_ => ThenTheMappedRequestHasContentSize("This is my content".Length)) + .BDDfy(); + } + + private void GivenTheContentTypeIs(string contentType) + { + _inputRequest.ContentType = contentType; + } + + private void ThenTheMappedRequestHasContentTypeHeader(string expected) + { + _mappedRequest.Data.Content.Headers.ContentType.MediaType.ShouldBe(expected); + } + + private void ThenTheMappedRequestHasContentSize(long expected) + { + _mappedRequest.Data.Content.Headers.ContentLength.ShouldBe(expected); + } + [Fact] public void Should_handle_no_content() {