问题描述
我只是想在 .net-core 控制器 POST 后获取客户端 IP 地址。我们在客户端和服务器之间有一个负载平衡器。
我的启动中的设置:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
并配置:
app.UseForwardedHeaders();
然后我尝试调用下面的代码,但它返回负载均衡器的 IP 地址,而不是客户端的 IP:
var clientIpAddress = HttpContext.Connection.RemoteIpAddress.ToString();
我已经尝试了可以在本网站和文档上搜索的所有内容,但似乎没有任何效果。我也试过使用 HttpContext.Request.Headers["X-Forwarded-For"]
返回空/空。
我们的 OPS 团队说 IP 没有被平衡器修改,应该在 x-Forwarded-For 标头的值中。为什么负载平衡器发回它的 IP 而不是客户端 IP 地址?
解决方法
你可以试试这个方法来获取客户端IP地址:
1.添加 Microsoft.AspNet.HttpOverrides 包。
2.n 您的 configure() 方法添加以下代码。
app.UseOverrideHeaders(new OverrideHeaderMiddlewareOptions
{
ForwardedOptions = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
,
在 X-Forwarded-For 中,您将获得客户端 ip,proxy1 & proxy2.
获取客户端/用户IP的第一项,第一项是原始客户端IP
HttpContext.Current.Request.Headers["X-Forwarded-For"].Split(new
char[] { ',' }).FirstOrDefault()