public JsonResult AddIP(IPAddressWhiteOA ip)
        {
            Guid platformId = GetPlatformId();

            ip.CreateTime = DateTime.Now;
            ip.PlatformId = platformId;
            Regex regexIPv4 = new Regex(@"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$", RegexOptions.IgnoreCase);
            Regex regexIPv6 = new Regex(!string.IsNullOrEmpty(ip.IPv6) && ip.IPv6.Contains("::") ? @"^([\da-f]{1,4}(:|::)){1,6}[\da-f]{1,4}$" : @"^([\da-f]{1,4}:){7}[\da-f]{1,4}$", RegexOptions.IgnoreCase);

            if (!string.IsNullOrEmpty(ip.IPv4) || !string.IsNullOrEmpty(ip.IPv6))
            {
                if (!string.IsNullOrEmpty(ip.IPv4) && !regexIPv4.IsMatch(ip.IPv4))
                {
                    return(Json(new { isError = true, msg = "IPv4地址有误" }));
                }
                if (!string.IsNullOrEmpty(ip.IPv6) && !regexIPv6.IsMatch(ip.IPv6))
                {
                    return(Json(new { isError = true, msg = "IPv6地址有误" }));
                }
                DbContext.IPAddressWhiteOAs.Add(ip);
                DbContext.SaveChanges();
                RefreshWhiteIPsCache();
                return(Json("操作成功"));
            }
            else
            {
                return(Json(new { isError = true, msg = "IPv4和IPv6地址不能全部为空" }));
            }
        }
        public JsonResult RemoveIP(IPAddressWhiteOA ip)
        {
            Guid platformId = GetPlatformId();
            var  targetIP   = DbContext.IPAddressWhiteOAs.Where(p => p.PlatformId == platformId && p.Id == ip.Id).FirstOrDefault();

            if (targetIP != null)
            {
                try
                {
                    DbContext.IPAddressWhiteOAs.Remove(targetIP);
                    DbContext.SaveChanges();
                    RefreshWhiteIPsCache();
                    return(Json("操作成功"));
                }
                catch (Exception)
                {
                    return(Json(new { isError = true, msg = "删除失败" }));
                }
            }
            else
            {
                return(Json(new { isError = true, msg = "没有找到要删除的IP白名单记录" }));
            }
        }
        public JsonResult EditIP(IPAddressWhiteOA ip)
        {
            Guid platformId = GetPlatformId();
            var  targetIP   = DbContext.IPAddressWhiteOAs.Where(p => p.PlatformId == platformId && p.Id == ip.Id).FirstOrDefault();

            if (targetIP != null)
            {
                Regex regexIPv4 = new Regex(@"^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$", RegexOptions.IgnoreCase);
                Regex regexIPv6 = new Regex((!string.IsNullOrEmpty(ip.IPv6) && ip.IPv6.Contains("::"))? @"^([\da-f]{1,4}(:|::)){1,6}[\da-f]{1,4}$" : @"^([\da-f]{1,4}:){7}[\da-f]{1,4}$", RegexOptions.IgnoreCase);
                if (!string.IsNullOrEmpty(ip.IPv4) || !string.IsNullOrEmpty(ip.IPv6))
                {
                    if (!string.IsNullOrEmpty(ip.IPv4) && !regexIPv4.IsMatch(ip.IPv4))
                    {
                        return(Json(new { isError = true, msg = "IPv4地址有误" }));
                    }
                    if (!string.IsNullOrEmpty(ip.IPv6) && !regexIPv6.IsMatch(ip.IPv6))
                    {
                        return(Json(new { isError = true, msg = "IPv6地址有误" }));
                    }
                    targetIP.IPv4   = ip.IPv4;
                    targetIP.IPv6   = ip.IPv6;
                    targetIP.Enable = ip.Enable;
                    DbContext.SaveChanges();
                    RefreshWhiteIPsCache();
                    return(Json("操作成功"));
                }
                else
                {
                    return(Json(new { isError = true, msg = "IPv4和IPv6地址不能全部为空" }));
                }
            }
            else
            {
                return(Json(new { isError = true, msg = "没有找到要修改的IP白名单记录" }));
            }
        }