Beispiel #1
0
        public async Task <BlogResponse <List <string> > > Ip2RegionAsync(string ip)
        {
            var response = new BlogResponse <List <string> >();

            if (ip.IsNullOrEmpty())
            {
                ip = _httpContextAccessor.HttpContext.Request.Headers["X-Real-IP"].FirstOrDefault() ??
                     _httpContextAccessor.HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault() ??
                     _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
            }
            else
            {
                if (!ip.IsIp())
                {
                    response.IsFailed("The ip address error.");
                    return(response);
                }
            }

            var path = Path.Combine(Directory.GetCurrentDirectory(), "Resources/ip2region.db");

            using var _search = new DbSearcher(path);
            var block = await _search.BinarySearchAsync(ip);

            var region = block.Region.Split("|").Distinct().Where(x => x != "0").ToList();

            region.AddFirst(ip);

            response.Result = region;
            return(response);
        }
        public async Task SearchAsync_Test()
        {
            // We don't need the synchronizeContext, so just set to false
            var memResult = await _search.MemorySearchAsync("183.192.62.65").ConfigureAwait(false);

            var binarySearchResult = await _search.BinarySearchAsync("183.192.62.65").ConfigureAwait(false);

            var bTreeSearchResult = await _search.BtreeSearchAsync("183.192.62.65").ConfigureAwait(false);

            Assert.NotNull(memResult.Region);
            Assert.NotNull(binarySearchResult.Region);
            Assert.NotNull(bTreeSearchResult.Region);

            Assert.Equal(memResult.Region, binarySearchResult.Region);
            Assert.Equal(bTreeSearchResult.Region, memResult.Region);
        }
        public async Task <Response <string> > Ip2Region([RegularExpression(@"\d{0,3}\.\d{0,3}\.\d{0,3}\.\d{0,3}", ErrorMessage = "ip格式有误")] string ip)
        {
            var response = new Response <string>();

            if (string.IsNullOrEmpty(ip))
            {
                ip = HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault();
                if (string.IsNullOrEmpty(ip))
                {
                    ip = Request.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
                }
            }

            var path = Path.Combine(Directory.GetCurrentDirectory(), "Resources/ip2region.db");

            using var _search = new DbSearcher(path);
            var result = (await _search.BinarySearchAsync(ip)).Region;

            response.Result = result;
            return(response);
        }