我试图从aspnetcore2.1api的控制器中的客户端获取远程ip地址,但是每次都得到相同的ip地址( Request.HttpContext?.Connection?.RemoteIpAddress?.ToString() == "::ffff:172.18.0.1"
).
我的转发头配置:
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.All,
RequireHeaderSymmetry = false,
KnownProxies = {
IPAddress.Parse("::ffff:172.18.0.0"),
IPAddress.Parse("::ffff:172.18.0.1"),
IPAddress.Parse("172.18.0.1"),
IPAddress.Parse("172.18.0.0")
}
});
我正在使用aspnetcore 2.1应用程序的标准dockerfile。同样在azure的kudu Jmeter 板中,我可以在标题中看到我的真实ip: X-Client-IP
,和 X-Forwarded-For
,但仍无法在请求上下文中获取它。
我错过了什么?有另一种方法从客户端获取远程ip地址吗?
1条答案
按热度按时间fcipmucu1#
我们可以用密码
HttpContext.Connection.RemoteIpAddress;
为了获得客户端ip地址,我已经测试了你的代码,它工作得很好。请执行以下故障排除:
1.确保我们调用
UseForwardedHeaders
在使用其他中间软件之前。2.默认情况下不启用中间件。必须启用转发标头中间件,应用程序才能使用useforwardedheaders处理转发标头。
作为一个额外的解决方法,我们可以使用
Request.Headers["X-Forwarded-For"]
获取客户端的ip地址而不是X-Client-IP
.我们可以这样做: