c#中serverdariables缺少HTTP_X_FORWARDED_FOR

时间:2013-07-08 07:37:55

标签: c# asp.net ip

我想获得ClientIPaddress但是当我致电Request.ServerVariables["HTTP_X_FORWARDED_FOR"]时,我总是得到NULL

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

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

提前致谢

4 个答案:

答案 0 :(得分:8)

如果请求是由代理转发的,

Request.ServerVariables["HTTP_X_FORWARDED_FOR"]将只有一个值。通常,您将使用Request.ServerVariables["REMOTE_ADDR"]获取客户端IP。

答案 1 :(得分:3)

请试试这个:

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/

答案 2 :(得分:3)

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"];
}

此方法可能对您有用。

答案 3 :(得分:1)

如果您在本地计算机上运行它,看不到任何事情是正常的,否则您在真正的外部主机上运行它。

.net HTTP_X_FORWARDED_FOR NULL on localhost