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(); } ///