ASP.NET核心:如何获取远程IP地址?

hcp*_*hcp 6 asp.net ip http asp.net-core-mvc asp.net-core

我尝试获取远程(客户端)IP地址:

var ip = httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress
Run Code Online (Sandbox Code Playgroud)

但它只适用于本地请求(它将返回::1值)

当我从远程计算机加载页面时,该值为null.我调查IHttpConnectionFeatureFeatures在这种情况下集合中没有.

为什么?以及如何正确获取远程IP地址?

Joh*_*hna 18

我知道这篇文章很老了,但是我来到这里寻找同样的问题,最终我做到了这一点:

在project.json上添加依赖项:

"Microsoft.AspNetCore.HttpOverrides": "1.0.0"
Run Code Online (Sandbox Code Playgroud)

在Startup.cs上,在Configure方法中添加:

  app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor |
            ForwardedHeaders.XForwardedProto
        });  
Run Code Online (Sandbox Code Playgroud)

而且当然:

using Microsoft.AspNetCore.HttpOverrides;
Run Code Online (Sandbox Code Playgroud)

然后,我得到了这样的ip:

Request.HttpContext.Connection.RemoteIpAddress
Run Code Online (Sandbox Code Playgroud)

在我的情况下,在VS中进行调试时我总是得到IpV6 localhost,但是当部署在IIS上时,我总是得到远程IP.

一些有用的链接: 如何在ASP.NET CORE中获取客户端IP地址?RemoteIpAddress始终为空

:: 1可能是因为:

IIS处的连接终止,然后转发到v.next Web服务器Kestrel,因此与Web服务器的连接确实来自localhost.(/sf/answers/2480968101/)

  • 是的,答案是一样的,因为我回答了两个问题。我一直在寻找相同的问题,当我找到解决方案时,我回答了两个问题(我没有标记为重复,因为前一段时间都问过这两个问题,而且两个问题的答案都不同,但都没有解决问题) (2认同)