diff --git a/src/WireMock.Net/Http/HttpClientHelper.cs b/src/WireMock.Net/Http/HttpClientHelper.cs index 1c85b862..9309802a 100644 --- a/src/WireMock.Net/Http/HttpClientHelper.cs +++ b/src/WireMock.Net/Http/HttpClientHelper.cs @@ -71,13 +71,6 @@ namespace WireMock.Http var httpRequestMessage = new HttpRequestMessage(new HttpMethod(requestMessage.Method), url); - WireMockList contentTypeHeader = null; - bool contentTypeHeaderPresent = requestMessage.Headers.Any(header => string.Equals(header.Key, HttpKnownHeaderNames.ContentType, StringComparison.OrdinalIgnoreCase)); - if (contentTypeHeaderPresent) - { - contentTypeHeader = requestMessage.Headers[HttpKnownHeaderNames.ContentType]; - } - // Set Body if present if (requestMessage.BodyAsBytes != null) { @@ -119,6 +112,12 @@ namespace WireMock.Http if (httpResponseMessage.Content != null) { var stream = await httpResponseMessage.Content.ReadAsStreamAsync(); + IEnumerable contentTypeHeader = null; + if (headers.Any(header => string.Equals(header.Key, HttpKnownHeaderNames.ContentType, StringComparison.OrdinalIgnoreCase))) + { + contentTypeHeader = headers.First(header => string.Equals(header.Key, HttpKnownHeaderNames.ContentType, StringComparison.OrdinalIgnoreCase)).Value; + } + var body = await BodyParser.Parse(stream, contentTypeHeader?.FirstOrDefault()); responseMessage.Body = body.BodyAsString; responseMessage.BodyAsJson = body.BodyAsJson; diff --git a/src/WireMock.Net/ResponseBuilders/Response.cs b/src/WireMock.Net/ResponseBuilders/Response.cs index dde017ea..2fc52d9c 100644 --- a/src/WireMock.Net/ResponseBuilders/Response.cs +++ b/src/WireMock.Net/ResponseBuilders/Response.cs @@ -69,8 +69,9 @@ namespace WireMock.ResponseBuilders } /// - /// Creates this instance. + /// Creates this instance with the specified function. /// + /// The callback function. /// A . [PublicAPI] public static IResponseBuilder Create([NotNull] Func func) diff --git a/src/WireMock.Net/Server/FluentMockServer.Admin.cs b/src/WireMock.Net/Server/FluentMockServer.Admin.cs index b622b225..b34f09c6 100644 --- a/src/WireMock.Net/Server/FluentMockServer.Admin.cs +++ b/src/WireMock.Net/Server/FluentMockServer.Admin.cs @@ -230,9 +230,10 @@ namespace WireMock.Server requestMessage.Query.Loop((key, value) => request.WithParam(key, value.ToArray())); requestMessage.Cookies.Loop((key, value) => request.WithCookie(key, value)); + var allBlackListedHeaders = new List(blacklistedHeaders) { "Cookie" }; requestMessage.Headers.Loop((key, value) => { - if (!blacklistedHeaders.Any(b => string.Equals(key, b, StringComparison.OrdinalIgnoreCase))) + if (!allBlackListedHeaders.Any(b => string.Equals(key, b, StringComparison.OrdinalIgnoreCase))) { request.WithHeader(key, value.ToArray()); } diff --git a/test/WireMock.Net.Tests/ResponseBuilderTests/ResponseCreateTests.cs b/test/WireMock.Net.Tests/ResponseBuilderTests/ResponseCreateTests.cs new file mode 100644 index 00000000..14f26550 --- /dev/null +++ b/test/WireMock.Net.Tests/ResponseBuilderTests/ResponseCreateTests.cs @@ -0,0 +1,29 @@ +using System; +using System.Threading.Tasks; +using NFluent; +using WireMock.ResponseBuilders; +using Xunit; + +namespace WireMock.Net.Tests.ResponseBuilderTests +{ + public class ResponseCreateTests + { + private const string ClientIp = "::1"; + + [Fact] + public async Task Response_Create() + { + // Assign + var responseMessage = new ResponseMessage { StatusCode = 500 }; + var request = new RequestMessage(new Uri("http://localhost"), "GET", ClientIp); + + var response = Response.Create(() => responseMessage); + + // Act + var providedResponse = await response.ProvideResponseAsync(request); + + // Assert + Check.That(providedResponse).Equals(responseMessage); + } + } +} \ No newline at end of file diff --git a/test/WireMock.Net.Tests/ResponseBuilderTests/ResponseWithBodyTests.cs b/test/WireMock.Net.Tests/ResponseBuilderTests/ResponseWithBodyTests.cs index 6dd95a3e..50812f54 100644 --- a/test/WireMock.Net.Tests/ResponseBuilderTests/ResponseWithBodyTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilderTests/ResponseWithBodyTests.cs @@ -3,7 +3,6 @@ using System.Text; using System.Threading.Tasks; using NFluent; using WireMock.ResponseBuilders; -using WireMock.Util; using Xunit; namespace WireMock.Net.Tests.ResponseBuilderTests diff --git a/test/WireMock.Net.Tests/Util/BodyParserTests.cs b/test/WireMock.Net.Tests/Util/BodyParserTests.cs new file mode 100644 index 00000000..21508f5c --- /dev/null +++ b/test/WireMock.Net.Tests/Util/BodyParserTests.cs @@ -0,0 +1,27 @@ +using System.IO; +using System.Text; +using System.Threading.Tasks; +using NFluent; +using WireMock.Util; +using Xunit; + +namespace WireMock.Net.Tests.Util +{ + public class BodyParserTests + { + [Fact] + public async Task BodyParser_Parse_ApplicationXml() + { + // Assign + var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("hello")); + + // Act + var body = await BodyParser.Parse(memoryStream, "application/xml; charset=UTF-8"); + + // Assert + Check.That(body.BodyAsBytes).IsNull(); + Check.That(body.BodyAsJson).IsNull(); + Check.That(body.BodyAsString).Equals("hello"); + } + } +} \ No newline at end of file