diff --git a/examples/WireMock.Net.ConsoleApplication/Program.cs b/examples/WireMock.Net.ConsoleApplication/Program.cs index 660d6d94..0f1513fa 100644 --- a/examples/WireMock.Net.ConsoleApplication/Program.cs +++ b/examples/WireMock.Net.ConsoleApplication/Program.cs @@ -1,5 +1,6 @@ using System; using Newtonsoft.Json; +using WireMock.Matchers; using WireMock.RequestBuilders; using WireMock.ResponseBuilders; @@ -50,6 +51,13 @@ namespace WireMock.Net.ConsoleApplication .WithHeader("Content-Type", "application/json") .WithBody(@"{ ""result"": ""data posted with 201""}")); + server + .Given(Request.WithUrl("/json").UsingPost().WithBody(new JsonPathMatcher("$.things[?(@.name == 'RequiredThing')]"))) + .RespondWith(Response + .WithStatusCode(201) + .WithHeader("Content-Type", "application/json") + .WithBody(@"{ ""result"": ""json posted with 201""}")); + server .Given(Request.WithUrl("/data").UsingDelete()) .RespondWith(Response diff --git a/src/WireMock/FluentMockServer.cs b/src/WireMock/FluentMockServer.cs index 35ec5063..6de0c666 100644 --- a/src/WireMock/FluentMockServer.cs +++ b/src/WireMock/FluentMockServer.cs @@ -249,21 +249,33 @@ namespace WireMock var request = _requestMapper.Map(ctx.Request); LogRequest(request); - var targetRoute = _routes.FirstOrDefault(route => route.IsRequestHandled(request)); - if (targetRoute == null) + try { - ctx.Response.StatusCode = 404; - var content = Encoding.UTF8.GetBytes("Mock Server: page not found"); + var targetRoute = _routes.FirstOrDefault(route => route.IsRequestHandled(request)); + if (targetRoute == null) + { + ctx.Response.StatusCode = 404; + + byte[] content = Encoding.UTF8.GetBytes("Mock Server: page not found"); + ctx.Response.OutputStream.Write(content, 0, content.Length); + } + else + { + var response = await targetRoute.ResponseTo(request); + _responseMapper.Map(response, ctx.Response); + } + } + catch (Exception ex) + { + ctx.Response.StatusCode = 500; + + byte[] content = Encoding.UTF8.GetBytes(ex.ToString()); ctx.Response.OutputStream.Write(content, 0, content.Length); } - else + finally { - var response = await targetRoute.ResponseTo(request); - - _responseMapper.Map(response, ctx.Response); + ctx.Response.Close(); } - - ctx.Response.Close(); } /// diff --git a/src/WireMock/HttpListenerResponseMapper.cs b/src/WireMock/HttpListenerResponseMapper.cs index cb96c132..05be93a9 100644 --- a/src/WireMock/HttpListenerResponseMapper.cs +++ b/src/WireMock/HttpListenerResponseMapper.cs @@ -1,13 +1,7 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; +using System.Linq; using System.Net; using System.Text; -[module: - SuppressMessage("StyleCop.CSharp.DocumentationRules", - "SA1633:FileMustHaveHeader", - Justification = "Reviewed. Suppression is OK here, as unknown copyright and company.")] - namespace WireMock { /// @@ -27,7 +21,9 @@ namespace WireMock public void Map(ResponseMessage responseMessage, HttpListenerResponse result) { result.StatusCode = responseMessage.StatusCode; + responseMessage.Headers.ToList().ForEach(pair => result.AddHeader(pair.Key, pair.Value)); + if (responseMessage.Body != null) { var content = Encoding.UTF8.GetBytes(responseMessage.Body); @@ -35,4 +31,4 @@ namespace WireMock } } } -} +} \ No newline at end of file