mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-29 22:02:16 +02:00
Refactor code
This commit is contained in:
53
src/WireMock.Net/Http/HttpClientHelper.cs
Normal file
53
src/WireMock.Net/Http/HttpClientHelper.cs
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace WireMock.Http
|
||||||
|
{
|
||||||
|
internal static class HttpClientHelper
|
||||||
|
{
|
||||||
|
public static async Task<ResponseMessage> SendAsync(RequestMessage requestMessage, string url)
|
||||||
|
{
|
||||||
|
using (var client = new HttpClient())
|
||||||
|
{
|
||||||
|
var httpRequestMessage = new HttpRequestMessage(new HttpMethod(requestMessage.Method), url);
|
||||||
|
|
||||||
|
// Overwrite the host header
|
||||||
|
httpRequestMessage.Headers.Host = new Uri(url).Authority;
|
||||||
|
|
||||||
|
// Set headers if present
|
||||||
|
if (requestMessage.Headers != null)
|
||||||
|
{
|
||||||
|
foreach (var headerName in requestMessage.Headers.Keys.Where(k => k.ToUpper() != "HOST"))
|
||||||
|
{
|
||||||
|
httpRequestMessage.Headers.Add(headerName, new[] { requestMessage.Headers[headerName] });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set Body if present
|
||||||
|
if (requestMessage.BodyAsBytes != null && requestMessage.BodyAsBytes.Length > 0)
|
||||||
|
{
|
||||||
|
httpRequestMessage.Content = new ByteArrayContent(requestMessage.BodyAsBytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call the URL
|
||||||
|
var httpResponseMessage = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead);
|
||||||
|
|
||||||
|
// Transform response
|
||||||
|
var responseMessage = new ResponseMessage
|
||||||
|
{
|
||||||
|
StatusCode = (int)httpResponseMessage.StatusCode,
|
||||||
|
Body = await httpResponseMessage.Content.ReadAsStringAsync()
|
||||||
|
};
|
||||||
|
|
||||||
|
foreach (var header in httpResponseMessage.Headers)
|
||||||
|
{
|
||||||
|
responseMessage.AddHeader(header.Key, header.Value.FirstOrDefault());
|
||||||
|
}
|
||||||
|
|
||||||
|
return responseMessage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,15 +1,13 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Concurrent;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using HandlebarsDotNet;
|
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using WireMock.Validation;
|
using WireMock.Validation;
|
||||||
|
using WireMock.Http;
|
||||||
|
using WireMock.Transformers;
|
||||||
|
|
||||||
namespace WireMock.ResponseBuilders
|
namespace WireMock.ResponseBuilders
|
||||||
{
|
{
|
||||||
@@ -261,78 +259,19 @@ namespace WireMock.ResponseBuilders
|
|||||||
{
|
{
|
||||||
Check.NotNull(requestMessage, nameof(requestMessage));
|
Check.NotNull(requestMessage, nameof(requestMessage));
|
||||||
|
|
||||||
ResponseMessage responseMessage;
|
|
||||||
|
|
||||||
if (ProxyUrl != null)
|
|
||||||
{
|
|
||||||
using (var client = new HttpClient())
|
|
||||||
{
|
|
||||||
var httpRequestMessage = new HttpRequestMessage(new HttpMethod(requestMessage.Method), ProxyUrl);
|
|
||||||
|
|
||||||
// Overwrite the host header
|
|
||||||
httpRequestMessage.Headers.Host = new Uri(ProxyUrl).Authority;
|
|
||||||
|
|
||||||
// Set headers if present
|
|
||||||
if (requestMessage.Headers != null)
|
|
||||||
{
|
|
||||||
foreach (var headerName in requestMessage.Headers.Keys.Where(k => k.ToUpper() != "HOST"))
|
|
||||||
{
|
|
||||||
httpRequestMessage.Headers.Add(headerName, new[] { requestMessage.Headers[headerName] });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set Body if present
|
|
||||||
if (requestMessage.BodyAsBytes != null && requestMessage.BodyAsBytes.Length > 0)
|
|
||||||
{
|
|
||||||
httpRequestMessage.Content = new ByteArrayContent(requestMessage.BodyAsBytes);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call the URL
|
|
||||||
var httpResponseMessage = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseContentRead);
|
|
||||||
|
|
||||||
// Transform response
|
|
||||||
responseMessage = new ResponseMessage
|
|
||||||
{
|
|
||||||
StatusCode = (int)httpResponseMessage.StatusCode,
|
|
||||||
Body = await httpResponseMessage.Content.ReadAsStringAsync()
|
|
||||||
};
|
|
||||||
|
|
||||||
foreach (var header in httpResponseMessage.Headers)
|
|
||||||
{
|
|
||||||
responseMessage.AddHeader(header.Key, header.Value.FirstOrDefault());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (UseTransformer)
|
|
||||||
{
|
|
||||||
responseMessage = new ResponseMessage { StatusCode = ResponseMessage.StatusCode, BodyOriginal = ResponseMessage.Body };
|
|
||||||
|
|
||||||
var template = new { request = requestMessage };
|
|
||||||
|
|
||||||
// Body
|
|
||||||
var templateBody = Handlebars.Compile(ResponseMessage.Body);
|
|
||||||
responseMessage.Body = templateBody(template);
|
|
||||||
|
|
||||||
// Headers
|
|
||||||
var newHeaders = new Dictionary<string, string>();
|
|
||||||
foreach (var header in ResponseMessage.Headers)
|
|
||||||
{
|
|
||||||
var templateHeaderKey = Handlebars.Compile(header.Key);
|
|
||||||
var templateHeaderValue = Handlebars.Compile(header.Value);
|
|
||||||
|
|
||||||
newHeaders.Add(templateHeaderKey(template), templateHeaderValue(template));
|
|
||||||
}
|
|
||||||
responseMessage.Headers = newHeaders;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
responseMessage = ResponseMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Delay != null)
|
if (Delay != null)
|
||||||
await Task.Delay(Delay.Value);
|
await Task.Delay(Delay.Value);
|
||||||
|
|
||||||
return responseMessage;
|
if (ProxyUrl != null)
|
||||||
|
{
|
||||||
|
return await HttpClientHelper.SendAsync(requestMessage, ProxyUrl);
|
||||||
|
}
|
||||||
|
else if (UseTransformer)
|
||||||
|
{
|
||||||
|
return ResponseMessageTransformer.Transform(requestMessage, ResponseMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResponseMessage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
33
src/WireMock.Net/Transformers/ResponseMessageTransformer.cs
Normal file
33
src/WireMock.Net/Transformers/ResponseMessageTransformer.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using HandlebarsDotNet;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace WireMock.Transformers
|
||||||
|
{
|
||||||
|
internal static class ResponseMessageTransformer
|
||||||
|
{
|
||||||
|
public static ResponseMessage Transform(RequestMessage requestMessage, ResponseMessage original)
|
||||||
|
{
|
||||||
|
var responseMessage = new ResponseMessage { StatusCode = original.StatusCode, BodyOriginal = original.Body };
|
||||||
|
|
||||||
|
var template = new { request = requestMessage };
|
||||||
|
|
||||||
|
// Body
|
||||||
|
var templateBody = Handlebars.Compile(original.Body);
|
||||||
|
responseMessage.Body = templateBody(template);
|
||||||
|
|
||||||
|
// Headers
|
||||||
|
var newHeaders = new Dictionary<string, string>();
|
||||||
|
foreach (var header in original.Headers)
|
||||||
|
{
|
||||||
|
var templateHeaderKey = Handlebars.Compile(header.Key);
|
||||||
|
var templateHeaderValue = Handlebars.Compile(header.Value);
|
||||||
|
|
||||||
|
newHeaders.Add(templateHeaderKey(template), templateHeaderValue(template));
|
||||||
|
}
|
||||||
|
|
||||||
|
responseMessage.Headers = newHeaders;
|
||||||
|
|
||||||
|
return responseMessage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user