public async Task <IHttpActionResult> Get([FromUri] string apiKey)
        {
            var hostForwardSettings = await _apiSettingsData.GetByApiKeyAsync(apiKey);

            if (hostForwardSettings == null)
            {
                return(BadRequest(Constants.InvalidApiKey));
            }

            var apiConfiguration = await _chaosProxyHostSettings.GetAsync(apiKey);

            return(new OkNegotiatedContentResult <ChaosConfiguration>(apiConfiguration, this));
        }
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request,
                                                                      CancellationToken cancellationToken)
        {
            HttpRequestMessage proxiedRequest = null;

            try
            {
                var apiHostDetails = await _apiHostCache.GetHost(request.RequestUri);

                if (apiHostDetails == null)
                {
                    return(request.CreateErrorResponse(HttpStatusCode.NotFound,
                                                       $"Host '{request.RequestUri.Host}' not recognised as a valid chaos api"));
                }

                var apiToForwardToHostName = apiHostDetails.ForwardApiHostName;

                proxiedRequest = new RequestProxier(request, apiHostDetails, apiToForwardToHostName).CreateProxiedRequest();

                var apiConfiguration = await _chaosProxyHostSettings.GetAsync(apiHostDetails.ApiKey);

                var client = CreateHttpClientForProxiedRequest(apiConfiguration, apiHostDetails.ApiKey);

                return(await client.SendAsync(proxiedRequest, cancellationToken));
            }
            catch (TaskCanceledException)
            {
                return(cancellationToken.IsCancellationRequested
                    ? request.CreateErrorResponse(HttpStatusCode.RequestTimeout,
                                                  $"Request forward to '{proxiedRequest.RequestUri}' failed, request timed out")
                    : request.CreateErrorResponse(HttpStatusCode.InternalServerError,
                                                  $"Request forward to '{proxiedRequest.RequestUri}' failed, "));
            }
            catch (Exception ex)
            {
                return(request.CreateErrorResponse(HttpStatusCode.InternalServerError,
                                                   $"Request forward to '{proxiedRequest.RequestUri}' failed, {ex}"));
            }
        }