调用 api 控制器时获取客户端 wan ip 地址
Get clients wan ip adddress when api controller is called
我有一个 JavaScript ajax 调用我的网络 api 控制器。当他们打电话时,我需要得到他们的 wan ip 地址。
我看过很多 MVC 示例,但我使用的是 asp.net 内核,那里的方法不起作用。值始终为空。
这是 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()
给了我空。另一个方法不为空,但该对象上没有 wanip 地址...
还有
我使用的是 nginx 而不是 IIS
常规 .NET Core 2.2 Web Api 控制器中的以下操作适合我:
[HttpGet]
public string Get()
{
return HttpContext.Connection.RemoteIpAddress.ToString();
}
但是,您提到您正在使用 nginx(我假设是反向代理)并且这改变了从何处获取 IP 地址信息。当我们使用反向代理时,代理需要将客户端的IP地址放在一个HTTPheaderX-Forwarded-For中,那么你的应用程序应该能够看到客户端的真实IP地址:
// using Microsoft.AspNetCore.HttpOverrides;
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
因此请确保按照 Host .NET Core in Linux with nginx(配置 nginx 部分)中的说明设置 X-Forwarded-For header,本教程涵盖了您需要的所有基本设置。
我有一个 JavaScript ajax 调用我的网络 api 控制器。当他们打电话时,我需要得到他们的 wan ip 地址。
我看过很多 MVC 示例,但我使用的是 asp.net 内核,那里的方法不起作用。值始终为空。
这是 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()
给了我空。另一个方法不为空,但该对象上没有 wanip 地址...
还有
我使用的是 nginx 而不是 IIS
常规 .NET Core 2.2 Web Api 控制器中的以下操作适合我:
[HttpGet]
public string Get()
{
return HttpContext.Connection.RemoteIpAddress.ToString();
}
但是,您提到您正在使用 nginx(我假设是反向代理)并且这改变了从何处获取 IP 地址信息。当我们使用反向代理时,代理需要将客户端的IP地址放在一个HTTPheaderX-Forwarded-For中,那么你的应用程序应该能够看到客户端的真实IP地址:
// using Microsoft.AspNetCore.HttpOverrides;
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
因此请确保按照 Host .NET Core in Linux with nginx(配置 nginx 部分)中的说明设置 X-Forwarded-For header,本教程涵盖了您需要的所有基本设置。