7

我想得到 ClientIPaddress 但是当我打电话时Request.ServerVariables["HTTP_X_FORWARDED_FOR"]我总是得到NULL.

检查列表后,Servervariables我注意到它HTTP_X_FORWARDED_FOR不在选项列表中。

任何人都知道这怎么可能以及如何解决?或者这个选项不在列表中并且我遗漏了一些东西是正常的。

提前致谢

4

4 回答 4

10

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]如果请求是由代理转发的,则只有一个值。通常你会使用Request.ServerVariables["REMOTE_ADDR"].

于 2013-07-08T07:44:51.010 回答
6
public string GetIPAddress()
{
    System.Web.HttpContext context = System.Web.HttpContext.Current;
    string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

    if (!string.IsNullOrEmpty(ipAddress))
    {
        string[] addresses = ipAddress.Split(',');
        if (addresses.Length != 0)
        {
            return addresses[0];
        }
    }

    return context.Request.ServerVariables["REMOTE_ADDR"];
}

这个方法可能对你有用。

于 2017-02-09T13:01:30.903 回答
4

请试试这个:

public static string GetUserIP() {   
    var ip = ( HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null
          && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != "" )
         ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
         : HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
    if (ip.Contains( "," ))
        ip = ip.Split( ',' ).First();
    return ip.Trim();
}

在这里找到:http:
//mycodepad.wordpress.com/2013/04/26/c-getting-a-user-ip-behind-a-proxy-http_x_forwarded_for/

于 2013-11-27T13:45:28.017 回答
2

如果你在本地机器上运行它,看不到任何东西是正常的,否则你在一个真正的外部主机上运行它。

.net HTTP_X_FORWARDED_FOR 本地主机上的 NULL

于 2017-04-23T06:19:49.087 回答