C# WebApi 获取客户端ip地址
转自:http://www.cnblogs.com/weixing/p/5674078.html
References required:
HttpContextWrapper
- System.Web.dllRemoteEndpointMessageProperty
- System.ServiceModel.dllOwinContext
- Microsoft.Owin.dll (you will have it already if you use Owin package)
- using System.Net.Http;
- public static class HttpRequestMessageExtensions
- {
- private const string HttpContext = "MS_HttpContext";
- private const string RemoteEndpointMessage =
- "System.ServiceModel.Channels.RemoteEndpointMessageProperty";
- private const string OwinContext = "MS_OwinContext";
- public static string GetClientIpAddress(this HttpRequestMessage request)
- {
- // Web-hosting. Needs reference to System.Web.dll
- if (request.Properties.ContainsKey(HttpContext))
- {
- dynamic ctx = request.Properties[HttpContext];
- if (ctx != null)
- {
- return ctx.Request.UserHostAddress;
- }
- }
- // Self-hosting. Needs reference to System.ServiceModel.dll.
- if (request.Properties.ContainsKey(RemoteEndpointMessage))
- {
- dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
- if (remoteEndpoint != null)
- {
- return remoteEndpoint.Address;
- }
- }
- // Self-hosting using Owin. Needs reference to Microsoft.Owin.dll.
- if (request.Properties.ContainsKey(OwinContext))
- {
- dynamic owinContext = request.Properties[OwinContext];
- if (owinContext != null)
- {
- return owinContext.Request.RemoteIpAddress;
- }
- }
- return null;
- }
- }

- using System.Net.Http;
- public static class HttpRequestMessageExtensions
- {
- private const string HttpContext = "MS_HttpContext";
- private const string RemoteEndpointMessage =
- "System.ServiceModel.Channels.RemoteEndpointMessageProperty";
- private const string OwinContext = "MS_OwinContext";
- public static string GetClientIpAddress(this HttpRequestMessage request)
- {
- // Web-hosting. Needs reference to System.Web.dll
- if (request.Properties.ContainsKey(HttpContext))
- {
- dynamic ctx = request.Properties[HttpContext];
- if (ctx != null)
- {
- return ctx.Request.UserHostAddress;
- }
- }
- // Self-hosting. Needs reference to System.ServiceModel.dll.
- if (request.Properties.ContainsKey(RemoteEndpointMessage))
- {
- dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
- if (remoteEndpoint != null)
- {
- return remoteEndpoint.Address;
- }
- }
- // Self-hosting using Owin. Needs reference to Microsoft.Owin.dll.
- if (request.Properties.ContainsKey(OwinContext))
- {
- dynamic owinContext = request.Properties[OwinContext];
- if (owinContext != null)
- {
- return owinContext.Request.RemoteIpAddress;
- }
- }
- return null;
- }
- }

第二种:
((System.Web.HttpContextWrapper)Request.Properties["MS_HttpContext"]).Request.UserHostAddress;
- public class CheckIP
- {
- #region 获取浏览器版本号
- /// <summary>
- /// 获取浏览器版本号
- /// </summary>
- /// <returns></returns>
- public static string GetBrowser()
- {
- HttpBrowserCapabilities bc = HttpContext.Current.Request.Browser;
- return bc.Browser + bc.Version;
- }
- #endregion
- #region 获取操作系统版本号
- /// <summary>
- /// 获取操作系统版本号
- /// </summary>
- /// <returns></returns>
- public static string GetOSVersion()
- {
- //UserAgent
- var userAgent = HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"];
- var osVersion = "未知";
- if (userAgent.Contains("NT 6.1"))
- {
- osVersion = "Windows 7";
- }
- else if (userAgent.Contains("NT 6.0"))
- {
- osVersion = "Windows Vista/Server 2008";
- }
- else if (userAgent.Contains("NT 5.2"))
- {
- osVersion = "Windows Server 2003";
- }
- else if (userAgent.Contains("NT 5.1"))
- {
- osVersion = "Windows XP";
- }
- else if (userAgent.Contains("NT 5"))
- {
- osVersion = "Windows 2000";
- }
- else if (userAgent.Contains("NT 4"))
- {
- osVersion = "Windows NT4";
- }
- else if (userAgent.Contains("Me"))
- {
- osVersion = "Windows Me";
- }
- else if (userAgent.Contains(""))
- {
- osVersion = "Windows 98";
- }
- else if (userAgent.Contains(""))
- {
- osVersion = "Windows 95";
- }
- else if (userAgent.Contains("Mac"))
- {
- osVersion = "Mac";
- }
- else if (userAgent.Contains("Unix"))
- {
- osVersion = "UNIX";
- }
- else if (userAgent.Contains("Linux"))
- {
- osVersion = "Linux";
- }
- else if (userAgent.Contains("SunOS"))
- {
- osVersion = "SunOS";
- }
- return osVersion;
- }
- #endregion
- #region 获取客户端IP地址
- /// <summary>
- /// 获取客户端IP地址
- /// </summary>
- /// <returns></returns>
- public static string GetIP()
- {
- string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
- if (string.IsNullOrEmpty(result))
- {
- result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
- }
- if (string.IsNullOrEmpty(result))
- {
- result = HttpContext.Current.Request.UserHostAddress;
- }
- if (string.IsNullOrEmpty(result))
- {
- return "0.0.0.0";
- }
- return result;
- }
- #endregion
- #region 取客户端真实IP
- /// <summary>
- /// 取得客户端真实IP。如果有代理则取第一个非内网地址
- /// </summary>
- public static string GetIPAddress
- {
- get
- {
- var result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
- if (!string.IsNullOrEmpty(result))
- {
- //可能有代理
- if (result.IndexOf(".") == -) //没有“.”肯定是非IPv4格式
- result = null;
- else
- {
- if (result.IndexOf(",") != -)
- {
- //有“,”,估计多个代理。取第一个不是内网的IP。
- result = result.Replace(" ", "").Replace("'", "");
- string[] temparyip = result.Split(",;".ToCharArray());
- for (int i = ; i < temparyip.Length; i++)
- {
- if (IsIPAddress(temparyip[i])
- && temparyip[i].Substring(, ) != "10."
- && temparyip[i].Substring(, ) != "192.168"
- && temparyip[i].Substring(, ) != "172.16.")
- {
- return temparyip[i]; //找到不是内网的地址
- }
- }
- }
- else if (IsIPAddress(result)) //代理即是IP格式
- return result;
- else
- result = null; //代理中的内容 非IP,取IP
- }
- }
- string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
- if (string.IsNullOrEmpty(result))
- result = HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
- if (string.IsNullOrEmpty(result))
- result = HttpContext.Current.Request.UserHostAddress;
- return result;
- }
- }
- #endregion
- #region 判断是否是IP格式
- /// <summary>
- /// 判断是否是IP地址格式 0.0.0.0
- /// </summary>
- /// <param name="str1">待判断的IP地址</param>
- /// <returns>true or false</returns>
- public static bool IsIPAddress(string str1)
- {
- if (string.IsNullOrEmpty(str1) || str1.Length < || str1.Length > ) return false;
- const string regFormat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$";
- var regex = new Regex(regFormat, RegexOptions.IgnoreCase);
- return regex.IsMatch(str1);
- }
- #endregion
- #region 获取公网IP
- /// <summary>
- /// 获取公网IP
- /// </summary>
- /// <returns></returns>
- public static string GetNetIP()
- {
- string tempIP = "";
- try
- {
- System.Net.WebRequest wr = System.Net.WebRequest.Create("http://city.ip138.com/ip2city.asp");
- System.IO.Stream s = wr.GetResponse().GetResponseStream();
- System.IO.StreamReader sr = new System.IO.StreamReader(s, System.Text.Encoding.GetEncoding("gb2312"));
- string all = sr.ReadToEnd(); //读取网站的数据
- int start = all.IndexOf("[") + ;
- int end = all.IndexOf("]", start);
- tempIP = all.Substring(start, end - start);
- sr.Close();
- s.Close();
- }
- catch
- {
- if (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length > )
- tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[].ToString();
- if (string.IsNullOrEmpty(tempIP))
- return GetIP();
- }
- return tempIP;
- }
- #endregion
- asp.net 获取客户端浏览器,ip地址,操作系统信息

- public class CheckIP
- {
- #region 获取浏览器版本号
- /// <summary>
- /// 获取浏览器版本号
- /// </summary>
- /// <returns></returns>
- public static string GetBrowser()
- {
- HttpBrowserCapabilities bc = HttpContext.Current.Request.Browser;
- return bc.Browser + bc.Version;
- }
- #endregion
- #region 获取操作系统版本号
- /// <summary>
- /// 获取操作系统版本号
- /// </summary>
- /// <returns></returns>
- public static string GetOSVersion()
- {
- //UserAgent
- var userAgent = HttpContext.Current.Request.ServerVariables["HTTP_USER_AGENT"];
- var osVersion = "未知";
- if (userAgent.Contains("NT 6.1"))
- {
- osVersion = "Windows 7";
- }
- else if (userAgent.Contains("NT 6.0"))
- {
- osVersion = "Windows Vista/Server 2008";
- }
- else if (userAgent.Contains("NT 5.2"))
- {
- osVersion = "Windows Server 2003";
- }
- else if (userAgent.Contains("NT 5.1"))
- {
- osVersion = "Windows XP";
- }
- else if (userAgent.Contains("NT 5"))
- {
- osVersion = "Windows 2000";
- }
- else if (userAgent.Contains("NT 4"))
- {
- osVersion = "Windows NT4";
- }
- else if (userAgent.Contains("Me"))
- {
- osVersion = "Windows Me";
- }
- else if (userAgent.Contains("98"))
- {
- osVersion = "Windows 98";
- }
- else if (userAgent.Contains("95"))
- {
- osVersion = "Windows 95";
- }
- else if (userAgent.Contains("Mac"))
- {
- osVersion = "Mac";
- }
- else if (userAgent.Contains("Unix"))
- {
- osVersion = "UNIX";
- }
- else if (userAgent.Contains("Linux"))
- {
- osVersion = "Linux";
- }
- else if (userAgent.Contains("SunOS"))
- {
- osVersion = "SunOS";
- }
- return osVersion;
- }
- #endregion
- #region 获取客户端IP地址
- /// <summary>
- /// 获取客户端IP地址
- /// </summary>
- /// <returns></returns>
- public static string GetIP()
- {
- string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
- if (string.IsNullOrEmpty(result))
- {
- result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
- }
- if (string.IsNullOrEmpty(result))
- {
- result = HttpContext.Current.Request.UserHostAddress;
- }
- if (string.IsNullOrEmpty(result))
- {
- return "0.0.0.0";
- }
- return result;
- }
- #endregion
- #region 取客户端真实IP
- /// <summary>
- /// 取得客户端真实IP。如果有代理则取第一个非内网地址
- /// </summary>
- public static string GetIPAddress
- {
- get
- {
- var result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
- if (!string.IsNullOrEmpty(result))
- {
- //可能有代理
- if (result.IndexOf(".") == -1) //没有“.”肯定是非IPv4格式
- result = null;
- else
- {
- if (result.IndexOf(",") != -1)
- {
- //有“,”,估计多个代理。取第一个不是内网的IP。
- result = result.Replace(" ", "").Replace("'", "");
- string[] temparyip = result.Split(",;".ToCharArray());
- for (int i = 0; i < temparyip.Length; i++)
- {
- if (IsIPAddress(temparyip[i])
- && temparyip[i].Substring(0, 3) != "10."
- && temparyip[i].Substring(0, 7) != "192.168"
- && temparyip[i].Substring(0, 7) != "172.16.")
- {
- return temparyip[i]; //找到不是内网的地址
- }
- }
- }
- else if (IsIPAddress(result)) //代理即是IP格式
- return result;
- else
- result = null; //代理中的内容 非IP,取IP
- }
- }
- string IpAddress = (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null && HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != String.Empty) ? HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] : HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
- if (string.IsNullOrEmpty(result))
- result = HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
- if (string.IsNullOrEmpty(result))
- result = HttpContext.Current.Request.UserHostAddress;
- return result;
- }
- }
- #endregion
- #region 判断是否是IP格式
- /// <summary>
- /// 判断是否是IP地址格式 0.0.0.0
- /// </summary>
- /// <param name="str1">待判断的IP地址</param>
- /// <returns>true or false</returns>
- public static bool IsIPAddress(string str1)
- {
- if (string.IsNullOrEmpty(str1) || str1.Length < 7 || str1.Length > 15) return false;
- const string regFormat = @"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$";
- var regex = new Regex(regFormat, RegexOptions.IgnoreCase);
- return regex.IsMatch(str1);
- }
- #endregion
- #region 获取公网IP
- /// <summary>
- /// 获取公网IP
- /// </summary>
- /// <returns></returns>
- public static string GetNetIP()
- {
- string tempIP = "";
- try
- {
- System.Net.WebRequest wr = System.Net.WebRequest.Create("http://city.ip138.com/ip2city.asp");
- System.IO.Stream s = wr.GetResponse().GetResponseStream();
- System.IO.StreamReader sr = new System.IO.StreamReader(s, System.Text.Encoding.GetEncoding("gb2312"));
- string all = sr.ReadToEnd(); //读取网站的数据
- int start = all.IndexOf("[") + 1;
- int end = all.IndexOf("]", start);
- tempIP = all.Substring(start, end - start);
- sr.Close();
- s.Close();
- }
- catch
- {
- if (System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList.Length > 1)
- tempIP = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[1].ToString();
- if (string.IsNullOrEmpty(tempIP))
- return GetIP();
- }
- return tempIP;
- }
- #endregion

/// <summary>
/// 获取客户端IP地址(无视代理)
/// </summary>
/// <returns>若失败则返回回送地址</returns>
public static string GetHostAddress()
{
string userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if (string.IsNullOrEmpty(userHostAddress))
{
if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
userHostAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim();
}
if (string.IsNullOrEmpty(userHostAddress))
{
userHostAddress = HttpContext.Current.Request.UserHostAddress;
}
//最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
{
return userHostAddress;
}
return "127.0.0.1";
}
/// <summary>
/// 检查IP地址格式
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
public static bool IsIP(string ip)
{
return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
}
获取客户端IP地址(无视代理)

- /// <summary>
- /// 获取客户端IP地址(无视代理)
- /// </summary>
- /// <returns>若失败则返回回送地址</returns>
- public static string GetHostAddress()
- {
- string userHostAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
- if (string.IsNullOrEmpty(userHostAddress))
- {
- if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
- userHostAddress = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString().Split(',')[0].Trim();
- }
- if (string.IsNullOrEmpty(userHostAddress))
- {
- userHostAddress = HttpContext.Current.Request.UserHostAddress;
- }
- //最后判断获取是否成功,并检查IP地址的格式(检查其格式非常重要)
- if (!string.IsNullOrEmpty(userHostAddress) && IsIP(userHostAddress))
- {
- return userHostAddress;
- }
- return "127.0.0.1";
- }
- /// <summary>
- /// 检查IP地址格式
- /// </summary>
- /// <param name="ip"></param>
- /// <returns></returns>
- public static bool IsIP(string ip)
- {
- return System.Text.RegularExpressions.Regex.IsMatch(ip, @"^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$");
- }

C# WebApi 获取客户端ip地址的更多相关文章
- .net core webapi 后台获取客户端ip地址
Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法 1.获取客户端IP地址实现方法(扩展类) 1 using Microsoft.AspNetC ...
- 在Thinkphp3.2.3框架下实现自动获取客户端IP地址的get_client_ip()函数
在Thinkphp框架下使用get_client_ip()函数获取客户端IP地址十分方便: 一行代码便可以实现:$ip = get_client_ip(); 但当我们测试时会遇到后台获取的IP地址显示 ...
- JAVA获取客户端IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- (转)【ASP.NET开发】获取客户端IP地址 via C#
[ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...
- php获取客户端ip地址
本文介绍一个,php获取客户端的IP地址的实例代码,有需要的朋友参考下吧. 获取客户端IP地址的代码,如下: 复制代码代码示例: <?php//取得客户端IP的函数function get_cl ...
- 获取客户端IP地址 via C#
获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己在项目中做过的事情,同 ...
- thinkphp 获取客户端ip地址方法
/** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @param boolean $adv 是否进行高级模式获取(有 ...
- 获取客户端IP地址定位城市信息
获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...
- Tp框架获取客户端IP地址
/** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */ function get_cl ...
随机推荐
- hihoCoder编程练习赛70
题目1 : 数位翻转 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 ...
- navicate 远程无法链接linux上mysql数据库问题
1. 先确认阿里云是否放开了3306权限 (开启阿里云服务器端口) 2. 连接linux,登录数据库:mysql -uroot -p 修改root用户远程登录权限: 想myuser使用mypasswo ...
- cf55D. Beautiful numbers(数位dp)
题意 题目链接 Sol 看到这种题就不难想到是数位dp了. 一个很显然的性质是一个数若能整除所有位数上的数,则一定能整除他们的lcm. 根据这个条件我们不难看出我们只需要记录每个数对所有数的lcm(也 ...
- SAP MM PR中的Fixed ID字段与MD04里PR单据号后的星号
SAP MM PR中的Fixed ID字段与MD04里PR单据号后的星号 如下图是我手工使用ME51N 创建的一个采购申请单据, MD04去看这个PR, 这个PR号码后面有一个*号,代表它是一 ...
- 17.Odoo产品分析 (二) – 商业板块(10) – 电子商务(1)
查看Odoo产品分析系列--目录 安装电子商务模块 1. 主页 点击"商店"菜单: 2. 添加商品 在odoo中,你不用进入"销售"模块,再进入产品列表添加产 ...
- AWS专线服务总结和疑问
1.AWS专线服务的入口, 从介绍页上可以看到,有如下功能: (1)专线可以连接AWS云主机和传统的数据中心或者分支机构. (2)专线可以连接AWS云主机和托管区的主机. 连接要素: (1)需要使用V ...
- 小程序实践(一):主页tab选项实现
官方文档 效果图: 实现底部Tab选项,只需要在项目根目录下的app.json下修改 如图: ----------------------------------------------------- ...
- 我喜欢 Google Flutter
在 Google I/O ’17 上,Google 向我们介绍了 Flutter —— 一款新的用于创建移动应用的开源库. 正如你所想的那样,Flutter 是能够帮助创建拥有漂亮 UI 界面的跨平台 ...
- 章节四、2-Switch语句
package introduction5; public class SwitchDemo { //switch用于固定值的判断,如星期.人的性别 //if用于判断区间.范围,能够用switch进行 ...
- SQL Server的优化器会缓存标量子查询结果集吗
在这篇博客"ORACLE当中自定义函数性优化浅析"中,我们介绍了通过标量子查询缓存来优化函数性能: 标量子查询缓存(scalar subquery caching)会通过缓存结果减 ...