mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-03-25 10:52:52 +01:00
SaveMappingToFile #27
This commit is contained in:
@@ -6,10 +6,17 @@
|
|||||||
<ApplicationIcon>../../WireMock.Net-Logo.ico</ApplicationIcon>
|
<ApplicationIcon>../../WireMock.Net-Logo.ico</ApplicationIcon>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Remove="__admin\mappings\826aff7c-6208-4a3c-923d-575248907db4.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="__admin\mappings\11111110-a633-40e8-a244-5cb80bc0ab66.json">
|
<Content Include="__admin\mappings\11111110-a633-40e8-a244-5cb80bc0ab66.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="__admin\mappings\826aff7c-6208-4a3c-923d-575248907db4.json">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -7,47 +7,46 @@ namespace WireMock.Http
|
|||||||
{
|
{
|
||||||
internal static class HttpClientHelper
|
internal static class HttpClientHelper
|
||||||
{
|
{
|
||||||
|
private static HttpClient client = new HttpClient();
|
||||||
|
|
||||||
public static async Task<ResponseMessage> SendAsync(RequestMessage requestMessage, string url)
|
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)
|
||||||
{
|
{
|
||||||
var httpRequestMessage = new HttpRequestMessage(new HttpMethod(requestMessage.Method), url);
|
foreach (var headerName in requestMessage.Headers.Keys.Where(k => k.ToUpper() != "HOST"))
|
||||||
|
|
||||||
// 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] });
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -130,8 +130,22 @@ namespace WireMock.Server
|
|||||||
{
|
{
|
||||||
var responseMessage = await HttpClientHelper.SendAsync(requestMessage, settings.Url);
|
var responseMessage = await HttpClientHelper.SendAsync(requestMessage, settings.Url);
|
||||||
|
|
||||||
|
var mapping = ToMapping(requestMessage, responseMessage);
|
||||||
|
SaveMappingToFile(mapping);
|
||||||
|
|
||||||
return responseMessage;
|
return responseMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Mapping ToMapping(RequestMessage requestMessage, ResponseMessage responseMessage)
|
||||||
|
{
|
||||||
|
var request = (Request)Request.Create();
|
||||||
|
request.WithPath(requestMessage.Path);
|
||||||
|
request.UsingVerb(requestMessage.Method);
|
||||||
|
|
||||||
|
var response = (Response)Response.Create(responseMessage);
|
||||||
|
|
||||||
|
return new Mapping(Guid.NewGuid(), string.Empty, request, response, 0);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Settings
|
#region Settings
|
||||||
@@ -211,21 +225,26 @@ namespace WireMock.Server
|
|||||||
|
|
||||||
#region Mappings
|
#region Mappings
|
||||||
private ResponseMessage MappingsSave(RequestMessage requestMessage)
|
private ResponseMessage MappingsSave(RequestMessage requestMessage)
|
||||||
|
{
|
||||||
|
foreach (var mapping in Mappings.Where(m => !m.IsAdminInterface))
|
||||||
|
{
|
||||||
|
SaveMappingToFile(mapping);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseMessage { Body = "Mappings saved to disk" };
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SaveMappingToFile(Mapping mapping)
|
||||||
{
|
{
|
||||||
string folder = Path.Combine(Directory.GetCurrentDirectory(), AdminMappingsFolder);
|
string folder = Path.Combine(Directory.GetCurrentDirectory(), AdminMappingsFolder);
|
||||||
if (!Directory.Exists(folder))
|
if (!Directory.Exists(folder))
|
||||||
Directory.CreateDirectory(folder);
|
Directory.CreateDirectory(folder);
|
||||||
|
|
||||||
foreach (var mapping in Mappings.Where(m => !m.IsAdminInterface))
|
var model = ToMappingModel(mapping);
|
||||||
{
|
string json = JsonConvert.SerializeObject(model, _settings);
|
||||||
var model = ToMappingModel(mapping);
|
string filename = !string.IsNullOrEmpty(mapping.Title) ? SanitizeFileName(mapping.Title) : mapping.Guid.ToString();
|
||||||
string json = JsonConvert.SerializeObject(model, _settings);
|
|
||||||
string filename = !string.IsNullOrEmpty(mapping.Title) ? SanitizeFileName(mapping.Title) : mapping.Guid.ToString();
|
|
||||||
|
|
||||||
File.WriteAllText(Path.Combine(folder, filename + ".json"), json);
|
File.WriteAllText(Path.Combine(folder, filename + ".json"), json);
|
||||||
}
|
|
||||||
|
|
||||||
return new ResponseMessage { Body = "Mappings saved to disk" };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static string SanitizeFileName(string name, char replaceChar = '_')
|
private static string SanitizeFileName(string name, char replaceChar = '_')
|
||||||
|
|||||||
Reference in New Issue
Block a user