在 ASP.NET Core 2.2 中获取客户端的 IP 地址

Posted

技术标签:

【中文标题】在 ASP.NET Core 2.2 中获取客户端的 IP 地址【英文标题】:Get client's IP address in ASP.NET Core 2.2 【发布时间】:2019-12-07 10:57:09 【问题描述】:

我在 asp.net core 2.2 中创建了一个微服务应用程序。我想从他使用它的地方获取用户的 IP 地址。

下面的 sn -p 提供了托管服务器的 ip 地址。

var remoteIpAddress = request.HttpContext.Connection.RemoteIpAddress;

我想获取使用 API 进行审核日志的用户的 IP 地址。

【问题讨论】:

我认为您必须将其从客户端传递到服务器(Web api) 如果您在同一台机器上托管 web api 并调用 web api,那么您将看到与request.HttpContext.Connection.RemoteIpAddress 相同的 IP 地址。 @JohnB 能否提供步骤或示例? 【参考方案1】:

注入IHttpContextAccessor

并把下面的sn-p

var result = string.Empty;

 //first try to get IP address from the forwarded header
                if (_httpContextAccessor.HttpContext.Request.Headers != null)
                
                    //the X-Forwarded-For (XFF) HTTP header field is a de facto standard for identifying the originating IP address of a client
                    //connecting to a web server through an HTTP proxy or load balancer

                    var forwardedHeader = _httpContextAccessor.HttpContext.Request.Headers["X-Forwarded-For"];
                    if (!StringValues.IsNullOrEmpty(forwardedHeader))
                        result = forwardedHeader.FirstOrDefault();
                

                //if this header not exists try get connection remote IP address
                if (string.IsNullOrEmpty(result) && _httpContextAccessor.HttpContext.Connection.RemoteIpAddress != null)
                    result = _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();

我认为它可能有效。

【讨论】:

以上是关于在 ASP.NET Core 2.2 中获取客户端的 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

使用 SIGNAL R 的 Angular 7 和 ASP.NET Core 2.2 的 CORS 策略问题

ASP.NET Core 2.2 : 二十. Action的多数据返回格式处理机制

如何在 ASP.NET CORE 中获取客户端 IP ?

如何在 ASP.NET CORE 3.1 中获取客户端 IP 地址?

Google Chart和Chart.Js,在Asp .NET Core 2.2中将脚本端发送C#变量

ASP.NET Core 2.2 CORS 没有“Access-Control-Allow-Origin”标头 [关闭]