【问题标题】:how to get client ip in asp core 3.1?如何在 asp core 3.1 中获取客户端 IP?
【发布时间】:2020-07-15 18:00:40
【问题描述】:

我将使用 _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString() 获取客户端 IP 但我得到了 127.0.0.1 或 ::1 。 我的网络服务器是 nginx,具有以下设置:

 location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header  X-Forwarded-For $remote_addr;
    }

我的代码: _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString(); 将返回 127.0.0.1 或 ::1 我在配置方法中添加了以下代码:

    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });

【问题讨论】:

    标签: asp.net-core nginx centos


    【解决方案1】:

    你的配置没问题。

    您是从本地启动您的应用程序吗?如果是这样,127.0.0.1::1 就可以了。因为127.0.0.1::1是你的ip地址。

    如果您已将应用部署到远程服务器,您将看不到 127.0.0.1

    请注意,您必须在使用 ip 地址的中间件之前使用app.UseForwardedHeaders(...)

    //...
    // use it here
    //...
    app.UseRouting();
    app.UseAuthorization();
    app.UseEndpoints();
    

    【讨论】:

    • 谢谢,不幸的是在两种模式下(调试和部署)它返回 127.0.0.1
    • 所以,请确保在其他中间件之前使用app.UseForwardedHeaders(...)
    • 是的,它被设置为第一个中间件,但仍然有效
    猜你喜欢
    • 2021-03-15
    • 2020-04-29
    • 2020-05-16
    • 2015-04-24
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多