/// <summary> /// Initializes a new instance of the <see cref="Response"/> class. /// </summary> /// <param name="responseMessage"> /// The response. /// </param> private Response(ResponseMessage responseMessage) { ResponseMessage = responseMessage; _fileSystemHandler = new LocalFileSystemHandler(); _responseMessageTransformer = new ResponseMessageTransformer(_fileSystemHandler); }
/// <summary> /// The provide response. /// </summary> /// <param name="requestMessage">The request.</param> /// <returns>The <see cref="ResponseMessage"/>.</returns> public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage) { Check.NotNull(requestMessage, nameof(requestMessage)); if (Delay != null) { await Task.Delay(Delay.Value); } if (ProxyUrl != null && _httpClientForProxy != null) { var requestUri = new Uri(requestMessage.Url); var proxyUri = new Uri(ProxyUrl); var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery); return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri)); } if (UseTransformer) { return(ResponseMessageTransformer.Transform(requestMessage, ResponseMessage)); } return(ResponseMessage); }
/// <inheritdoc cref="IResponseProvider.ProvideResponseAsync(RequestMessage, IWireMockServerSettings)"/> public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { Check.NotNull(requestMessage, nameof(requestMessage)); Check.NotNull(settings, nameof(settings)); if (Delay != null) { await Task.Delay(Delay.Value); } if (ProxyUrl != null && _httpClientForProxy != null) { var requestUri = new Uri(requestMessage.Url); var proxyUri = new Uri(ProxyUrl); var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery); return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri, !settings.DisableJsonBodyParsing.GetValueOrDefault(false))); } ResponseMessage responseMessage; if (Callback == null) { responseMessage = ResponseMessage; } else { responseMessage = Callback(requestMessage); if (!WithCallbackUsed) { // Copy StatusCode from ResponseMessage responseMessage.StatusCode = ResponseMessage.StatusCode; // Copy Headers from ResponseMessage (if defined) if (ResponseMessage.Headers != null) { responseMessage.Headers = ResponseMessage.Headers; } } } if (UseTransformer) { var factory = new HandlebarsContextFactory(settings.FileSystemHandler, settings.HandlebarsRegistrationCallback); var responseMessageTransformer = new ResponseMessageTransformer(factory); return(responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile)); } if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true) { ResponseMessage.BodyData.BodyAsBytes = settings.FileSystemHandler.ReadResponseBodyAsFile(responseMessage.BodyData.BodyAsFile); } return(responseMessage); }
public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage, IFileSystemHandler fileSystemHandler) { Check.NotNull(requestMessage, nameof(requestMessage)); if (Delay != null) { await Task.Delay(Delay.Value); } if (Callback != null) { var callbackResponseMessage = Callback(requestMessage); if (!WithCallbackUsed) { // Copy StatusCode from ResponseMessage callbackResponseMessage.StatusCode = ResponseMessage.StatusCode; // Copy Headers from ResponseMessage (if defined) if (ResponseMessage.Headers != null) { callbackResponseMessage.Headers = ResponseMessage.Headers; } } return(callbackResponseMessage); } if (ProxyUrl != null && _httpClientForProxy != null) { var requestUri = new Uri(requestMessage.Url); var proxyUri = new Uri(ProxyUrl); var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery); return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri)); } if (UseTransformer) { var responseMessageTransformer = new ResponseMessageTransformer(fileSystemHandler); return(responseMessageTransformer.Transform(requestMessage, ResponseMessage)); } if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true) { ResponseMessage.BodyData.BodyAsBytes = fileSystemHandler.ReadResponseBodyAsFile(ResponseMessage.BodyData.BodyAsFile); ResponseMessage.BodyData.BodyAsFile = null; } return(ResponseMessage); }
/// <summary> /// The provide response. /// </summary> /// <param name="requestMessage">The request.</param> /// <returns>The <see cref="ResponseMessage"/>.</returns> public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage) { Check.NotNull(requestMessage, nameof(requestMessage)); if (Delay != null) { await Task.Delay(Delay.Value); } if (Callback != null) { var callbackResponseMessage = Callback(requestMessage); if (!WithCallbackUsed) { // Copy StatusCode from ResponseMessage callbackResponseMessage.StatusCode = ResponseMessage.StatusCode; // Copy Headers from ResponseMessage (if defined) if (ResponseMessage.Headers != null) { callbackResponseMessage.Headers = ResponseMessage.Headers; } } return(callbackResponseMessage); } if (ProxyUrl != null && _httpClientForProxy != null) { var requestUri = new Uri(requestMessage.Url); var proxyUri = new Uri(ProxyUrl); var proxyUriWithRequestPathAndQuery = new Uri(proxyUri, requestUri.PathAndQuery); return(await HttpClientHelper.SendAsync(_httpClientForProxy, requestMessage, proxyUriWithRequestPathAndQuery.AbsoluteUri)); } if (UseTransformer) { return(ResponseMessageTransformer.Transform(requestMessage, ResponseMessage)); } // Just return normal defined ResponseMessage return(ResponseMessage); }
/// <summary> /// The provide response. /// </summary> /// <param name="requestMessage">The request.</param> /// <returns>The <see cref="ResponseMessage"/>.</returns> public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage) { Check.NotNull(requestMessage, nameof(requestMessage)); if (Delay != null) { await Task.Delay(Delay.Value); } if (ProxyUrl != null) { return(await HttpClientHelper.SendAsync(requestMessage, ProxyUrl)); } else if (UseTransformer) { return(ResponseMessageTransformer.Transform(requestMessage, ResponseMessage)); } return(ResponseMessage); }
/// <inheritdoc cref="IResponseProvider.ProvideResponseAsync(RequestMessage, IWireMockServerSettings)"/> public async Task <ResponseMessage> ProvideResponseAsync(RequestMessage requestMessage, IWireMockServerSettings settings) { Check.NotNull(requestMessage, nameof(requestMessage)); Check.NotNull(settings, nameof(settings)); if (Delay != null) { await Task.Delay(Delay.Value); } if (ProxyUrl != null && _httpClientForProxy != null) { string RemoveFirstOccurrence(string source, string find) { int place = source.IndexOf(find, StringComparison.OrdinalIgnoreCase); return(place >= 0 ? source.Remove(place, find.Length) : source); } var requestUri = new Uri(requestMessage.Url); // Build the proxy url and skip duplicates string extra = RemoveFirstOccurrence(requestUri.LocalPath.TrimEnd('/'), new Uri(ProxyUrl).LocalPath.TrimEnd('/')); requestMessage.ProxyUrl = ProxyUrl + extra + requestUri.Query; return(await HttpClientHelper.SendAsync( _httpClientForProxy, requestMessage, requestMessage.ProxyUrl, !settings.DisableJsonBodyParsing.GetValueOrDefault(false), !settings.DisableRequestBodyDecompressing.GetValueOrDefault(false) )); } ResponseMessage responseMessage; if (Callback == null && CallbackAsync == null) { responseMessage = ResponseMessage; } else { if (Callback != null) { responseMessage = Callback(requestMessage); } else { responseMessage = await CallbackAsync(requestMessage); } if (!WithCallbackUsed) { // Copy StatusCode from ResponseMessage responseMessage.StatusCode = ResponseMessage.StatusCode; // Copy Headers from ResponseMessage (if defined) if (ResponseMessage.Headers != null) { responseMessage.Headers = ResponseMessage.Headers; } } } if (UseTransformer) { var factory = new HandlebarsContextFactory(settings.FileSystemHandler, settings.HandlebarsRegistrationCallback); var responseMessageTransformer = new ResponseMessageTransformer(factory); return(responseMessageTransformer.Transform(requestMessage, responseMessage, UseTransformerForBodyAsFile)); } if (!UseTransformer && ResponseMessage.BodyData?.BodyAsFileIsCached == true) { ResponseMessage.BodyData.BodyAsBytes = settings.FileSystemHandler.ReadResponseBodyAsFile(responseMessage.BodyData.BodyAsFile); } return(responseMessage); }