在 .NET 中获取客户端真实IP地址(而不是代理服务器的IP地址)可以通过 HttpContext.Current.Request.UserHostAddress 属性来实现。然而,在某些情况下,代理服务器可能会更改请求头信息,导致 UserHostAddress 返回代理服务器的IP地址而不是客户端的真实IP地址。
为了解决这个问题,你可以尝试从请求头中获取真实的客户端IP地址。通常,客户端真实IP地址会作为请求头的一部分,例如 X-Forwarded-For。不过,需要注意的是,这些请求头的名称可能因代理服务器而异。
以下是一个在 .NET Framework 中获取客户端真实IP地址的方法,假设客户端真实IP地址被传递到 X-Forwarded-For 请求头中:
using System.Web;
public class MyController : ApiController
{
[HttpGet]
public string GetRealClientIp()
{
string clientIp;
// 尝试获取X-Real-IP请求头
if (HttpContext.Current.Request.Headers["X-Forwarded-For"] != null)
{
clientIp = HttpContext.Current.Request.Headers["X-Forwarded-For"];
}
else
{
// 如果X-Forwarded-For请求头不存在,则使用UserHostAddress属性
clientIp = HttpContext.Current.Request.UserHostAddress;
}
return $"Your Real IP Address is: {clientIp}";
}
}
获取真实IP地址的方法可能因部署环境和网络配置而异。如果你使用的是反向代理或负载均衡器,请确保在代理服务器中正确配置了请求头传递,并在代码中使用正确的请求头名称来获取客户端真实IP地址。