diff --git a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs index 20fb432e..37d9f08a 100644 --- a/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs +++ b/examples/WireMock.Net.Console.Net452.Classic/MainApp.cs @@ -643,6 +643,7 @@ namespace WireMock.Net.ConsoleApplication .WithStatusCode(200) .WithHeader("Content-Type", "application/json") .WithBodyAsJson(new { Id = "5bdf076c-5654-4b3e-842c-7caf1fabf8c9" })); + server .Given(Request.Create().WithPath("/random200or505").UsingGet()) .RespondWith(Response.Create().WithCallback(request => @@ -650,7 +651,11 @@ namespace WireMock.Net.ConsoleApplication int code = new Random().Next(1, 2) == 1 ? 505 : 200; return new ResponseMessage { - BodyData = new BodyData { BodyAsString = "random200or505:" + code, DetectedBodyType = Types.BodyType.String }, + BodyData = new BodyData + { + BodyAsString = "random200or505:" + code + ", HeadersFromRequest = " + string.Join(",", request.Headers), + DetectedBodyType = Types.BodyType.String, + }, StatusCode = code }; })); diff --git a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs index 97806713..5703d283 100644 --- a/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs +++ b/test/WireMock.Net.Tests/ResponseBuilders/ResponseWithCallbackTests.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; @@ -279,4 +280,38 @@ public class ResponseWithCallbackTests response.Message.BodyData.BodyAsString.Should().Be("/fooBar"); response.Message.StatusCode.Should().Be(302); } + + // https://github.com/WireMock-Net/WireMock.Net/issues/898 + [Fact] + public async Task Response_WithCallback_WithRequestHeaders_Should_BeAccessibleInCallback() + { + // Assign + var headerKey = "headerKey"; + var headerValues = new[] { "abc" }; + var requestHeaders = new Dictionary + { + { headerKey, headerValues } + }; + var requestMessage = new RequestMessage(new UrlDetails("http://localhost/foo"), "GET", "::1", null, requestHeaders); + var responseBuilder = Response.Create() + .WithCallback(request => + { + var headersFromRequest = request!.Headers![headerKey].ToList(); + headersFromRequest.Add("extra"); + + return new ResponseMessage + { + Headers = new Dictionary> + { + { headerKey, new WireMockList(headersFromRequest) } + } + }; + }); + + // Act + var response = await responseBuilder.ProvideResponseAsync(_mappingMock.Object, requestMessage, _settings).ConfigureAwait(false); + + // Assert + response.Message.Headers![headerKey].Should().Contain("extra"); + } } \ No newline at end of file