mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-01-11 22:30:41 +01:00
Handle Exception (#13)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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("<html><body>Mock Server: page not found</body></html>");
|
||||
var targetRoute = _routes.FirstOrDefault(route => route.IsRequestHandled(request));
|
||||
if (targetRoute == null)
|
||||
{
|
||||
ctx.Response.StatusCode = 404;
|
||||
|
||||
byte[] content = Encoding.UTF8.GetBytes("<html><body>Mock Server: page not found</body></html>");
|
||||
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();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -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
|
||||
{
|
||||
/// <summary>
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user