c# - 调用 api Controller 时获取客户端 wan IP 地址

标签 c# asp.net-core nginx clientip

我有一个对我的 Web API Controller 的 JavaScript ajax 调用。当他们调用电话时,我需要获取他们的 WAN IP 地址。

我看过很多MVC的例子,但我使用的是asp.net core,那里的方法不起作用。值始终为空。

这是js:

 $.ajax({
    url: "/my server ip",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    headers: { 'Content-Type': 'application/json' },
    success: function (data) { 
         $("#DeviceIp").html(data.ip + " " + data.wanIp);
            }
        });

我的API:

    IActionContextAccessor accessor

    _accessor = accessor;


    [HttpPost]
    [Route("Account/GetDeviceIp")]
    public IpStats GetDeviceIp()
    {
        var WanIp = _accessor.ActionContext.HttpContext.Request.Headers.ToString();
    }

注意

我应该这样说:

_accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString()

给了我空。另一种方法不为 null,但该对象上没有 wanip 地址...

还有

我使用的是 nginx 而不是 IIS

最佳答案

常规 .NET Core 2.2 Web Api Controller 中的以下操作适合我:

[HttpGet]
public string Get()
{
    return HttpContext.Connection.RemoteIpAddress.ToString();
}

但是,您提到您正在使用 nginx(我假设是反向代理),这会改变获取 IP 地址信息的位置。当我们使用反向代理时,代理需要将客户端的IP地址放在HTTP header X-Forwarded-For中,然后您的应用程序应该能够看到客户端的真实IP地址:

// using Microsoft.AspNetCore.HttpOverrides;

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

因此请确保按照 Host .NET Core in Linux with nginx 中所述设置 X-Forwarded-For header (配置 nginx 部分),本教程涵盖了您需要的所有基本设置。

关于c# - 调用 api Controller 时获取客户端 wan IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62614121/

相关文章:

c# - JsonConvert.SerializeObject 发生异常时会丢失消息

c# - C# 中带有信封的对象的 XML 序列化

c# - 创建针对 .Net Framework 4.5 和 .Net Standard 的库

c# - Asp.net 核心。使用类型参数配置 IOptions 方法(非通用)

c# - *.json 文件更改后 IOptionsSnapshot 不刷新

c# - 我可以在不将页面限制为特定模块的情况下呈现 DotNetNuke 模块的控件吗?

c# - 如何在 C# .NET 中读取 HDF5 可变长度字符串属性

ruby-on-rails - 如何配置 capistrano 在一台服务器上部署 puma 和 nginx,并在另一台服务器上部署 resque?

php - 如何制作服务器 block 配置文件以在 Nginx 服务器上运行 CakePHP 应用程序?

node.js - 负载均衡器后面的 Socket.io