C#获取用户真实外网ip方法,非调用其他平台接口的方法
/// <summary>
/// 获取客户端IP地址
/// </summary>
/// <returns>若失败则返回回送地址</returns>
public static string GetIP()
{
//如果客户端使用了代理服务器,则利用HTTP_X_FORWARDED_FOR找到客户端IP地址
string userHostAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim();
//否则直接读取REMOTE_ADDR获取客户端IP地址
if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
}
//前两者均失败,则利用Request.UserHostAddress属性获取IP地址,但此时无法确定该IP是客户端IP还是代理IP
if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.UserHostAddress;
}
//最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
{
return userHostAddress;
}
return "127.0.0.1";
}
Request.Headers.FirstOrDefault(t =>
t.Key.Equals("X-Forwarded-For", StringComparison.InvariantCultureIgnoreCase))
也不太真实
var context = (HttpContextBase)Request.Properties["MS_HttpContext"];//获取传统context
var clientIp=context.Request.UserHostAddress;
这个和你的服务部署有关。如果你的服务部署在F5或者Nginx后面,则需要 F5/Nginx 获取外部的IP,放到Header里面,约定好KEY,服务从key中获取真实IP