如何在 .net-core 而不是负载均衡器中获取客户端 IP 地址? 使用 X-Forwarded-For

问题描述

我只是想在 .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()