コード例 #1
0
        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;
            }
        }