在ASP.NET Core 2.x中获取客户端IP地址
一、前言
大家也知道服务端请求时我们获取的IP地址是包含在请求头中,因此这也大大便利了IP的获取。
在ASP.NET中,可以通过以下方式获取客户端的IP地址。
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
但这不适用于ASP.NET Core 2.0。我们需要一种不同的方法来检索HTTP请求信息。
当然这边具体的可以看微软官方给出的文档:在 ASP.NET Core 中访问 HttpContext
那么接下来我们来配置一下吧
二、配置
1、介绍asp.net 下的获取IP代码:
public static string IPAddress
{
get
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (result != null && result != String.Empty)
{
//可能有代理
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格式 ,IsIPAddress判断是否是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["REMOTE_ADDR"]; if (null == result || result == String.Empty)
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (result == null || result == String.Empty)
result = HttpContext.Current.Request.UserHostAddress; return result;
}
} public static bool IsIPAddress(string str)
{
if (string.IsNullOrWhiteSpace(str) || str.Length < || str.Length > )
return false; string regformat = @"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}{1}quot;"; Regex regex = new Regex(regformat, RegexOptions.IgnoreCase); return regex.IsMatch(str);
}
}
上面代码直接放在项目中就可以用了。
2、asp.net core 2.x上配置
第一步:在控制器中定义变量
private IHttpContextAccessor _accessor;
第二步: 控制器的构造函数进行注入
public ValuesController(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
第三步:在action中 调用
_accessor.HttpContext.Connection.RemoteIpAddress.ToString()
第四步:我们应该要在startup.cs中配置IHttpContextAccessor
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
第五步:可以运行测试一下:

发现已经获取到IP地址啦。
注:在ASP.NET 2.1中,在startup.cs需要修改成以下的内容:
services.AddHttpContextAccessor();
services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>();
该RemoteIpAddress是类型的IPAddress,不是string。它包含IPv4,IPv6和其他信息,它不像经典的ASP.NET,它对我们更有用。
asp.net core 交流群:787464275 欢迎加群交流
如果您认为这篇文章还不错或者有所收获,您可以点击右下角的【推荐】按钮精神支持,因为这种支持是我继续写作,分享的最大动力!
微信公众号:欢迎关注 QQ技术交流群: 欢迎加群

在ASP.NET Core 2.x中获取客户端IP地址的更多相关文章
- 在ASP.NET Core中获取客户端IP地址
随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...
- 再论 ASP.NET 中获取客户端IP地址
说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分 ...
- vue中获取客户端IP地址(不需要额外引入三方文件)
之前看了几种方法 ,都是引入腾讯,新浪,搜狐等的三方js文件来查询IP地址,但是我自己测试的时候IP地址不准确,所以就找了找,发现了这个方法,准确的获取到了IP地址和cmd的ipconfig获取到的I ...
- 集群环境下JSP中获取客户端IP地址的方法
String ip = request.getHeader("X-Forwarded-For");if (ip == null || ip.length() == 0 || &qu ...
- (转)【ASP.NET开发】获取客户端IP地址 via C#
[ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...
- .net core webapi 后台获取客户端ip地址
Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法 1.获取客户端IP地址实现方法(扩展类) 1 using Microsoft.AspNetC ...
- 从HTTP请求中获取客户IP地址
/** * 从HTTP请求中获取客户IP地址 * * @param request http请求 * @return 客户IP地址 */ public s ...
- 获取客户端IP地址 via C#
获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己在项目中做过的事情,同 ...
- C# WebApi 获取客户端ip地址
转自:http://www.cnblogs.com/weixing/p/5674078.html References required: HttpContextWrapper - System.We ...
随机推荐
- [转载]ECMA-262 6th Edition / Draft August 24, 2014 Draft ECMAScript Language Specification
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-23.4 Draft Report Errors and Issues at: htt ...
- 简单的多对一传输ns2仿真
实验名称:简单的多对一传输仿真 实验目的:1.研究怎么实现多对一传输. 实验步骤: 1.写c++代码并注册报文头. 先说一下多对一传输的方式.最开始,接收端发送控制报文给所有的发送端,告诉他们要发送多 ...
- jQuery遍历方式
对象遍历
- 莫烦课程Batch Normalization 批标准化
for i in range(N_HIDDEN): # build hidden layers and BN layers input_size = 1 if i == 0 else 10 fc = ...
- 【技巧总结】Penetration Test Engineer[5]-Operating System Security(SQL Server、MySQL提权)
4.数据库安全基础 4.1.MSSQL 数据库角色权限 sysadmin:执行SQL Server中的任何动作 db_owner:可以执行数据库中技术所有动作的用户 public:数据库的每个合法用户 ...
- 浅析Postgres中的并发控制(Concurrency Control)与事务特性(上)
转载:https://www.cnblogs.com/flying-tiger/p/9567213.html#4121483#undefined PostgreSQL为开发者提供了一组丰富的工具来管理 ...
- libevent简介和使用【转】
转自:http://www.open-open.com/lib/view/open1386510630330.html libevent是一个基于事件触发的网络库,memcached底层也是使用lib ...
- linux强制踢掉登录用户【转】
[root@Wang ~]# w :: up :, users, load average: 0.71, 0.58, 0.57 USER TTY FROM LOGIN@ IDLE JCPU PCPU ...
- JAVA汉字转拼音(取首字母大写)
import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseT ...
- 【h5标签转小程序标签】小程序使用wxParse解析html教程
一.先下载所需文件,下载地址:https://pan.baidu.com/s/1umZO9uI24zUTRd7VqaWbAg ,下载完毕后会得到一个wxParse文件夹,后面会用到: 二.先拷贝cs ...