首页 新闻 会员 周边 捐助

WebApi接口如何获取访问站点的IP?

0
悬赏园豆:20 [已解决问题] 解决于 2021-10-08 10:09

前提:我写了一个获取随机图片的webapi接口,然后嵌入到我的网站当做背景图。
接口里面做了访问IP限制,获取访问者的IP地址,想要实现仅供某个站点访问,即白名单。获取代码如下:

 public static string GetClientIp()
        {
          
         String clientIP = "";
            if (System.Web.HttpContext.Current != null)
            {
                clientIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (string.IsNullOrEmpty(clientIP) || (clientIP.ToLower() == "unknown"))
                {
                    clientIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
                    if (string.IsNullOrEmpty(clientIP))
                    {
                        clientIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                    }
                }
                else
                {
                    clientIP = clientIP.Split(',')[0];
                }
            }
            Match mc = Regex.Matches(clientIP, "((?:(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d)))\\.){3}(?:25[0-5]|2[0-4]\\d|((1\\d{2})|([1-9]?\\d))))")[0];
            return mc.Groups[0].Value.ToString();
        }

然后我做了访问测试,发现访问我的网站时,该接口获取到的IP是我当前电脑的IP地址(例如 119.2.154.145),而不是我的网站的IP地址(例如119.3.122.158)。因为这方便内容接触的比较少,就比较不能理解这个问题,请问大家我应该怎么操作,才能获取到是从哪个网站调用的我的API接口的呢?即我想获取嵌入了我接口的站点IP而不是当前访问站点的客户端IP。

劉亞坤的主页 劉亞坤 | 初学一级 | 园豆:15
提问于:2019-11-21 10:38
< >
分享
最佳答案
1

如果你服务器使用了 Nginx 反代,可以在请求同中加入IP 请参阅
如果你是部署到IIS或者其它,请参阅

收获园豆:20
Mops | 初学一级 |园豆:23 | 2019-11-21 10:52
其他回答(3)
0
小小高 | 园豆:1307 (小虾三级) | 2019-11-21 10:46

你好,我查阅了这个问题,但似乎获取到的和我的代码获取到的是一样的IP,都是访问者客户端的IP

支持(0) 反对(0) 劉亞坤 | 园豆:15 (初学一级) | 2019-11-21 11:43
0

你的意思是你发布到多个服务器了吗,不然你的网站是不是应该只有一个IP呢???

你小子嚣张呀 | 园豆:630 (小虾三级) | 2019-11-21 17:22

我的博客,和接口是两个项目

支持(0) 反对(0) 劉亞坤 | 园豆:15 (初学一级) | 2019-11-22 09:04
0

为什么我这样弄 ip 是0.0.0.0 类似这样的,本机测试。。

永远跟党走i | 园豆:1542 (小虾三级) | 2019-11-22 09:03

我获取的是192.168.0.89 这种的

支持(0) 反对(0) 劉亞坤 | 园豆:15 (初学一级) | 2019-11-22 09:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册