我正在尝试记录我已经构建的应用程序之一的客户端IP地址。它在dev服务器上正常工作。但是,一旦我们将解决方案部署到具有负载均衡器的生产服务器上,它似乎就会记录负载均衡器的IP地址,而不是客户端IP。
我知道我们需要添加HTTP_X_FORWARD_FOR头。
这是我的密码:
private static string GetCurrentIp()
{
String clientIP =
(HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] == null) ?
HttpContext.Current.Request.UserHostAddress :
HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
return clientIP;
}如果有人能帮我找出我犯的错误,我很感激
发布于 2016-11-07 05:20:25
有时,您的访问者在代理服务器或路由器后面,标准Request.UserHostAddress只捕获代理服务器或路由器的IP地址。在这种情况下,用户的IP地址将存储在服务器变量("HTTP_X_FORWARDED_FOR")中。
protected string GetIPAddress()
{
System.Web.HttpContext context = System.Web.HttpContext.Current;
string ipAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (!string.IsNullOrEmpty(ipAddress))
{
string[] addresses = ipAddress.Split(',');
if (addresses.Length != 0)
{
return addresses[0];
}
}
return context.Request.ServerVariables["REMOTE_ADDR"];
}上面的代码可以帮助您使其工作。
发布于 2016-11-07 03:19:31
另一个可行的选择是:
var remoteIpAddress = request.HttpContext.Connection.RemoteIpAddress;这并不是说你必须使用这个方法,但是这个过程对你来说要简单得多。
以前,这在.NET Core RC1中被打破了,但后来发现它已经准备好从RC2开始生产。
https://stackoverflow.com/questions/40457297
复制相似问题