我有一个对我的 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/