Пример #1
0
        static void Main(string[] args)
        {
            int           i        = 1;//701882
            List <string> codeList = new List <string>();
            var           cen      = new GenerateShortURL();

            while (i < 99999999)
            {
                // cen.ConfusionConvert(i) //先插入数据,产生自增ID,然后用自增ID生成随机字符串
                //var long = md5Str.ToString()

                //var val = DateTime.Now.toun + i;  //Utils.GenerateCode(6);//
                var code = cen.ConfusionConvert(i);//Utils.GenerateCode(); // cen.ConfusionConvert(i);//GetChart(4, i+new Random().Next(1,10)+1000000);//GenerateUniqueText(4);//GetChart(4, GuidToLongID());//GetRandString(6, 90000000);// GenerateRandomCode(4);//
                // Console.WriteLine($"Num : {i}");
                // Console.WriteLine($"Code : {code}");
                //if (codeList.Contains(code))
                //{
                //codeList.OrderBy(c => c);
                //foreach (var item in codeList)
                //{
                //    Console.WriteLine(item);
                //}
                //   Console.WriteLine("任务结束");
                //   Console.ReadKey();
                // }
                codeList.Add(code);
                i++;
            }
            Console.WriteLine("去从前:" + codeList.Count);
            Console.WriteLine("去从后:" + codeList.Distinct().Count());
            Console.ReadKey();
            Console.WriteLine("Hello World!");
        }
Пример #2
0
        public async Task <object> Generate(string url)
        {
            #region 验证url的重复和有效性
            var urlInfo = UrlCache.Where(t => t.Key == url).FirstOrDefault();
            //如果存在直接返回
            if (!string.IsNullOrWhiteSpace(urlInfo.Key))
            {
                return(new { ShortURL = urlInfo.Value });
            }
            //最多缓存50个
            if (UrlCache.Count() > 50)
            {
                UrlCache.RemoveRange(0, UrlCache.Count() - 50);
            }

            //Nginx变量设置 proxy_set_header x-host $scheme://$host;
            var host = Request.Headers["x-host"].FirstOrDefault();//Nginx 问题获取的是内网地址
            try
            {
                if ((!string.IsNullOrWhiteSpace(host) && url.Contains(host)))
                {
                    return new { ShortURL = url }
                }
                ;

                var statusCode = await httpClient.GetAsync(url);

                if (!url.Contains("http") ||
                    (int)statusCode.StatusCode >= 400)
                {
                    return new { ShortURL = "", Msg = "请输入有效网址" }
                }
                ;
            }
            catch (Exception ex)
            {
                return(new { ShortURL = "", Msg = "请输入有效网址" });
            }
            #endregion

            var dbConnection = new MySqlConnection(configuration.GetValue <string>("MySQLSPConnection"));
            var entityPo     = new UrlRecordPO();
            var id           = await dbConnection.InsertAsync(entityPo);

            var seqKey = configuration.GetValue <string>("SeqKye");//获取62个符号和数字(乱序后的)
            GenerateShortURL generate = new GenerateShortURL(seqKey);
            var shortURL = generate.ConfusionConvert(id);
            entityPo.Id       = id;
            entityPo.ShortURL = shortURL;
            entityPo.Url      = url;
            await dbConnection.UpdateAsync(entityPo);

            UrlCache.Add(new KeyValuePair <string, string>(url, shortURL));
            return(new { shortURL });
        }
Пример #3
0
        public async Task <IActionResult> Index(string key)
        {
            if (string.IsNullOrWhiteSpace(key))
            {
                return(View());
            }

            var seqKey = configuration.GetValue <string>("SeqKye");//获取62个符号和数字(乱序后的)
            GenerateShortURL generate = new GenerateShortURL(seqKey);
            var id           = generate.ConfusionConvert(key);
            var dbConnection = new MySqlConnection(configuration.GetValue <string>("MySQLSPConnection"));
            //根据id查询对应的映射关系实体
            var entity = await dbConnection.QueryFirstOrDefaultAsync <UrlRecordPO>("SELECT * from ShortURLs where Id = @id;", new { id });

            entity.LastModificationTime = DateTime.Now;
            entity.AccessNumber++;
            await dbConnection.UpdateAsync(entity);//更新点击数和最后修改时间

            return(Redirect(entity.Url ?? "http://www.haojima.net"));
        }