示例#1
0
        private Guid PopulateIdentification(string identityField, RecordMap recordMap)
        {
            var id = Guid.NewGuid();

            recordMap.Add(identityField, id.ToTableRecordValueString());
            return(id);
        }
        private async Task <Guid> GenerateRecordAsync(RecordMap recordMap)
        {
            foreach (var field in table.Fields)
            {
                var value = field.GetNewValue();
                if (value != null)
                {
                    recordMap.Add(field.Name, value);
                }

                await log.WriteLineAsync($"{table.Name}: field '{field.Name}' generated value = {value}");
            }

            await log.WriteLineAsync();

            return(await DatabaseContext.Instance.CreateRecordAsync(table.Name, table.IdentityField, recordMap));
        }
        private async Task <Guid> ProcessTableRecord()
        {
            var recordMap = new RecordMap();

            if (table.Dependencies.Count > 0)
            {
                foreach (var dependency in table.Dependencies)
                {
                    var dependencyValue = await new DependencyContentGenerator(dependency, log).StartAsync();
                    if (dependencyValue != null)
                    {
                        recordMap.Add(dependency.TargetIdentityFieldName, dependencyValue);
                    }
                }
            }

            return(await GenerateRecordAsync(recordMap));
        }
示例#4
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContextBase  httpContextBase = filterContext.HttpContext;
            HttpRequestBase  request         = httpContextBase.Request;
            HttpResponseBase response        = httpContextBase.Response;
            string           operKey         = request.UserHostAddress + request.Path.ToLower();
            OperRecord       operRecord      = null;

            lock (RecordMap)
            {
                if (RecordMap.ContainsKey(operKey))
                {
                    operRecord = RecordMap[operKey];
                    long totalMilliseconds = Convert.ToInt64((DateTime.Now - operRecord.LastOperDate).TotalMilliseconds);
                    int  count             = Convert.ToInt32((totalMilliseconds - totalMilliseconds % ClearMillisecond) / ClearMillisecond);
                    operRecord.Count = operRecord.Count > count ? operRecord.Count - count : 0;
                }
                else
                {
                    RecordMap.Add(operKey, operRecord = new OperRecord
                    {
                        Count        = 1,
                        OperKey      = operKey,
                        LastOperDate = DateTime.Now
                    });
                }
            }
            if (operRecord.Count >= CountLimit)
            {
                response.ContentEncoding = Encoding.UTF8;
                response.ContentType     = "application/json;charset=UTF-8";
                response.StatusCode      = 200;
                response.Write(JsonConvert.SerializeObject(new Result
                {
                    code = -1,
                    msg  = "操作过于频繁、请稍后重试!",
                }));
                filterContext.Result = new EmptyResult();
            }
            else
            {
                lock (RecordMap)
                {
                    operRecord.Count++;
                    operRecord.LastOperDate = DateTime.Now;
                }
                base.OnActionExecuting(filterContext);
            }
            if ((DateTime.Now - LastClearDate).TotalSeconds > 60)
            {
                lock (RecordMap)
                {
                    long sumMillisecond = ClearMillisecond * CountLimit;
                    foreach (string tkey in new HashSet <string>(RecordMap.Keys))
                    {
                        if (tkey.EndsWith(request.Path))
                        {
                            operRecord = RecordMap[tkey];
                            long totalMilliseconds = Convert.ToInt64((DateTime.Now - operRecord.LastOperDate).TotalMilliseconds);
                            if (totalMilliseconds >= sumMillisecond)
                            {
                                RecordMap.Remove(tkey);
                            }
                        }
                    }
                }
                LastClearDate = DateTime.Now;
            }
        }
示例#5
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            HttpContextBase httpContextBase = filterContext.HttpContext;
            HttpRequestBase request         = httpContextBase.Request;
            string          key             = request.UserHostAddress + request.Path.ToLower();
            bool            temp            = true;

            lock (RecordMap)
            {
                if (RecordMap.ContainsKey(key))
                {
                    temp = (DateTime.Now - RecordMap[key]).TotalMilliseconds > IntervalMillisecond;
                }
                else
                {
                    RecordMap.Add(key, DateTime.Now);
                }
            }
            if (temp)
            {
                lock (RecordMap)
                {
                    if (RecordMap.ContainsKey(key))
                    {
                        RecordMap[key] = DateTime.Now;
                    }
                    else
                    {
                        RecordMap.Add(key, DateTime.Now);
                    }
                }
                base.OnActionExecuting(filterContext);
            }
            else
            {
                HttpResponseBase response = httpContextBase.Response;
                response.ContentEncoding = Encoding.UTF8;
                response.ContentType     = "application/json;charset=UTF-8";
                response.StatusCode      = 200;
                response.Write(JsonConvert.SerializeObject(new Result
                {
                    code = -1,
                    msg  = "操作过于频繁、请稍后重试!",
                }));
                filterContext.Result = new EmptyResult();
            }
            if ((DateTime.Now - LastClearDate).TotalSeconds > 60)
            {
                lock (RecordMap)
                {
                    foreach (string tkey in new HashSet <string>(RecordMap.Keys))
                    {
                        if (tkey.EndsWith(request.Path) && RecordMap.ContainsKey(tkey) && (DateTime.Now - RecordMap[tkey]).TotalMilliseconds > IntervalMillisecond)
                        {
                            RecordMap.Remove(tkey);
                        }
                    }
                }
                LastClearDate = DateTime.Now;
            }
        }