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

时间:2016-04-01 09:06:33

标签: asp.net http ip asp.net-core asp.net-core-mvc

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

var ip = httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress

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

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

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

3 个答案:

答案 0 :(得分:16)

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

在project.json上添加依赖项:

"Microsoft.AspNetCore.HttpOverrides": "1.0.0"

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

  app.UseForwardedHeaders(new ForwardedHeadersOptions
        {
            ForwardedHeaders = ForwardedHeaders.XForwardedFor |
            ForwardedHeaders.XForwardedProto
        });  

当然还有:

using Microsoft.AspNetCore.HttpOverrides;

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

Request.HttpContext.Connection.RemoteIpAddress

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

一些有用的链接: How do I get client IP address in ASP.NET CORE?RemoteIpAddress is always null

:: 1可能是因为:

  

IIS终止连接,然后转发到v.next Web服务器Kestrel,因此与Web服务器的连接确实来自localhost。   (https://stackoverflow.com/a/35442401/5326387

答案 1 :(得分:0)

只需尝试此代码,

var ipAddress = HttpContext.Connection.RemoteIpAddress;

并且如果您在同一局域网中有另一台计算机,请尝试与此计算机连接,但使用用户ip而不是本地主机。否则,您将始终得到:: 1的结果。

答案 2 :(得分:-4)

试试这个:

resolve