2016-11-07 184 views
0

我正在尝试记录我构建的其中一个应用程序的客户端IP地址。它可以在开发服务器上正常工作。但是,只要我们将解决方案部署到具有负载平衡器的生产服务器上,似乎就会记录Load Balancer的IP地址,而不是客户端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; 
    } 

感激,如果有人可以帮助我确定我已经做

回答

1

有时您的访问者位于代理服务器或路由器的后面,标准的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"]; 
} 

上面的代码可以帮助你使它工作。

0

另一种可行的选择的错误是:

var remoteIpAddress = request.HttpContext.Connection.RemoteIpAddress; 

不是说你已经必须使用这个,但是这个过程对于你来说这个方法简单得多。

以前,这在.NET Core RC1中被打破了,但是自从RC2以来它就已经准备好了。