首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日志客户端IP地址

日志客户端IP地址
EN

Stack Overflow用户
提问于 2016-11-07 03:17:12
回答 2查看 4K关注 0票数 0

我正在尝试记录我已经构建的应用程序之一的客户端IP地址。它在dev服务器上正常工作。但是,一旦我们将解决方案部署到具有负载均衡器的生产服务器上,它似乎就会记录负载均衡器的IP地址,而不是客户端IP。

我知道我们需要添加HTTP_X_FORWARD_FOR头。

这是我的密码:

代码语言:javascript
复制
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;
    }

如果有人能帮我找出我犯的错误,我很感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-07 05:20:25

有时,您的访问者在代理服务器或路由器后面,标准Request.UserHostAddress只捕获代理服务器或路由器的IP地址。在这种情况下,用户的IP地址将存储在服务器变量("HTTP_X_FORWARDED_FOR")中。

代码语言:javascript
复制
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"];
}

上面的代码可以帮助您使其工作。

票数 3
EN

Stack Overflow用户

发布于 2016-11-07 03:19:31

另一个可行的选择是:

代码语言:javascript
复制
var remoteIpAddress = request.HttpContext.Connection.RemoteIpAddress;

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

以前,这在.NET Core RC1中被打破了,但后来发现它已经准备好从RC2开始生产。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40457297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档