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}")); } }