我尝试获取远程(客户端)IP地址:
var ip = httpContext.Features.Get<IHttpConnectionFeature>()?.RemoteIpAddress
但它只适用于本地请求(它将返回::1
值)
当我从远程计算机加载页面时,该值为null。我调查了在这种情况下IHttpConnectionFeature
集合中没有Features
。
为什么?以及如何正确获取远程IP地址?
我知道这篇文章很老了,但是我来到这里寻找同样的问题,最终我做到了这一点:
在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)
试试这段代码,
var ipAddress = HttpContext.Connection.RemoteIpAddress;
如果你在同一局域网中有另一台计算机,尝试连接这台电脑,但使用用户IP而不是localhost。否则你将获得:: 1结果。
试试这个:
Request.ServerVariables["REMOTE_ADDR"];