public async Task <ApiHostForwardingSettings> GetHost(Uri requestUri) { var host = requestUri.Host; if (_apiKeyLookup.TryGetValue(host, out var cacheKey)) { if (_memoryCache.Contains(cacheKey)) { return((ApiHostForwardingSettings)_memoryCache.Get(cacheKey)); } } var apiHostDetails = await _apiSettingsData.GetByHostAsync(host); if (apiHostDetails == null) { return(null); } cacheKey = $"host-settings:{apiHostDetails.ApiKey}"; _apiKeyLookup.TryAdd(host, cacheKey); _memoryCache.Add(cacheKey, apiHostDetails, DateTimeOffset.UtcNow.AddSeconds(30)); return(apiHostDetails); }
public async Task <IHttpActionResult> Post(CreateHostMappingRequest createHostMappingRequest) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var chaosUrl = _apiSettings.GenerateChaosUrl(createHostMappingRequest.ChaosSubdomainName); if (await _apiSettings.GetByHostAsync(chaosUrl) != null) { return(Conflict()); } var result = await _apiSettings.AddAsync(createHostMappingRequest.ChaosSubdomainName, createHostMappingRequest.ForwardHostName, createHostMappingRequest.Scheme, createHostMappingRequest.Port); return(Created(createHostMappingRequest.ChaosSubdomainName, result)); }