2016-04-01 41 views
3

我试图让远程(客户端)IP ADDRES:ASP.NET核心:如何获得远程IP地址?

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

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

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

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

+1

据我所知,它有几个问题,特别是如果你将它放在loadbalancer和/或iis后面。有一个'UseOverrideHeaders'左右,但在rc2中将被重命名为'UseForwardedHeaders',请参阅公告https://github.com/aspnet/Announcements/issues/147。但据我所知,这可能对你都没有帮助,因为它会返回最后的X-Forwarded-For,在许多云部署中,它将是反向过滤而不是原始用户。 – Tseng

+0

但是,据我所知,允许确定从哪一跳获得X-Forwarded-For(即2跳回来,而不是最新的 – Tseng

+0

),我们认为这是一个很好的答案http:// stackoverflow.com/a/36316189/625581 –

回答

11

我知道这个职位是旧的,但我来到这里寻找同样的问题,finnaly我这样做:

在project.json添加依赖:

"Microsoft.AspNetCore.HttpOverrides": "1.0.0" 

在Startup.cs,在配置方法中添加:

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

,当然:

using Microsoft.AspNetCore.HttpOverrides; 

然后,我得到的IP是这样的:

Request.HttpContext.Connection.RemoteIpAddress 

在我的情况下,在VS调试时,我总是IPV6本地主机,但是当上部署IIS我总是得到远程IP。

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

的:: 1可能是因为:

连接终止在IIS,然后转发到红隼,在v.next Web服务器,所以连接到web服务器确实来自localhost。 (https://stackoverflow.com/a/35442401/5326387

+0

当你发现类似的问题并发布了类似的答案时,你可能想要添加一个交叉引用两个。特别是如果一个看起来比另一个更完整。HTH – superjos

+0

@superjos你是什么意思? – Johna

+0

还有另一个SO问题[这里](https://stackoverflow.com/a/41335701/540776)这是非常接近这个一个和你基本上复制的地方相同的答案。在这种情况下,将一个问题指向另一个问题可能很有用。甚至可能会提出关闭的问题。 – superjos

-2

试试这个:

Request.ServerVariables["REMOTE_ADDR"]; 
+0

在.NET Core中不存在Request.ServerVariables。 – kiml42