我试图让远程(客户端)IP ADDRES:ASP.NET核心:如何获得远程IP地址?
var ip = httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress
但它仅适用于本地的请求(它将返回::1
值)
当我从远程计算机加载页面值为null。我调查了在这种情况下Features
集合中没有IHttpConnectionFeature
。
为什么?以及如何正确获取远程IP地址?
我试图让远程(客户端)IP ADDRES:ASP.NET核心:如何获得远程IP地址?
var ip = httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress
但它仅适用于本地的请求(它将返回::1
值)
当我从远程计算机加载页面值为null。我调查了在这种情况下Features
集合中没有IHttpConnectionFeature
。
为什么?以及如何正确获取远程IP地址?
我知道这个职位是旧的,但我来到这里寻找同样的问题,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)
据我所知,它有几个问题,特别是如果你将它放在loadbalancer和/或iis后面。有一个'UseOverrideHeaders'左右,但在rc2中将被重命名为'UseForwardedHeaders',请参阅公告https://github.com/aspnet/Announcements/issues/147。但据我所知,这可能对你都没有帮助,因为它会返回最后的X-Forwarded-For,在许多云部署中,它将是反向过滤而不是原始用户。 – Tseng
但是,据我所知,允许确定从哪一跳获得X-Forwarded-For(即2跳回来,而不是最新的 – Tseng
),我们认为这是一个很好的答案http:// stackoverflow.com/a/36316189/625581 –