public HttpResponseMessage Get(string id, string env) { ConfigurationSet data = null; try { var environmentId = string.Format("{0}-{1}", id, env); var environment = environmentReader.GetEnvironment(environmentId); if (File.Exists(GetFilename(id, env, environment))) { var stringData = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory.Replace("bin", "") + "\\App_data\\" + GetFilename(id, env, environment)); data = JsonConvert.DeserializeObject <ConfigurationSet>(stringData); data.RequestedBy = User.Identity.Name; var r = Request.CreateResponse(HttpStatusCode.OK, data); r.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true }; return(r); } ConfigCacheItem cachedData; if (Cache.TryGetValue(environmentId, out cachedData)) { if (cachedData.ETag == environment.ETag) { data = cachedData.ConfigSet; } } if (data == null) { data = reader.GetConfigSetData(id, env); if (cachedData != null) { cachedData.ConfigSet = data; cachedData.ETag = environment.ETag; } else { Cache.TryAdd(environmentId, new ConfigCacheItem { ETag = environment.ETag, ConfigSet = data }); } } File.WriteAllText(AppDomain.CurrentDomain.BaseDirectory.Replace("bin", "") + "\\App_data\\" + GetFilename(id, env, environment), JsonConvert.SerializeObject(data)); data.RequestedBy = User.Identity.Name; var result = Request.CreateResponse(HttpStatusCode.OK, data); result.Headers.CacheControl = new CacheControlHeaderValue { NoCache = true }; return(result); } catch (Exception ex) { ex.Log(); throw; } }