public void Update(MapPair pair)
        {
            UrlAddressParser inParser = pair.In;

            if (inParser.IsIp)
            {
                throw new Exception("输入地址不能为IP");
            }
            var p = maplist.FirstOrDefault(o => o.Id == pair.Id);

            p.In          = pair.In;
            p.Out         = pair.Out;
            p.Enabled     = pair.Enabled;
            p.UserSetting = pair.UserSetting;
            Save();
        }
        /// <summary>
        /// 新增一组映射
        /// </summary>
        /// <param name="in"></param>
        /// <param name="out">全局唯一的</param>
        public async Task <bool> Add(string @in, string @out)
        {
            UrlAddressParser inParser  = @in;
            UrlAddressParser outParser = @out;


            if (inParser.IsIp)
            {
                throw new Exception("输入地址不能为IP");
            }

            if (maplist.Where(a => a.In == inParser.Url).Count() > 0)
            {
                var confirm = await jsruntime.InvokeAsync <bool>("confirm", new object[] {
                    "已存在相同的输入地址,是否禁用旧的映射?"
                });

                if (confirm)
                {
                    maplist.Where(a => a.In == inParser.Url && a.Enabled).First().Enabled = false;
                }
                else
                {
                    throw new Exception("已存在相同的输入地址");
                }
            }


            var pair = new MapPair()
            {
                In      = inParser.Url,
                Out     = outParser.Url,
                Id      = Guid.NewGuid().ToString(),
                Enabled = true,
            };

            maplist.Add(pair);

            Save();

            return(true);
        }