3

我正在尝试使用 asp.net (mvc4) 应用程序获取客户端的公共 IP 地址。当我使用 HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]if 给我一个空字符串,当我使用HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]它时发送一个像这样的字符串“::1”(不带双引号)。它与IIS express有关吗?如何使用 asp.net 获取客户端 IP?

谢谢。

4

1 回答 1

4

这是我用来获取 IP 地址的方法:

    private static string GetIPAddress()
    {
        try
        {
            if (System.ServiceModel.OperationContext.Current != null)
            {
                var endpoint = OperationContext.Current.IncomingMessageProperties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
                return endpoint.Address;
            }
            if (System.Web.HttpContext.Current != null)
            {
                // Check proxied IP address
                if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
                    return HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] + " via " +
                        HttpContext.Current.Request.UserHostAddress;
                else
                    return HttpContext.Current.Request.UserHostAddress;

            }
        }
        catch { }
        return "Unknown";
    }

请注意,第一部分适用于 WCF 服务,因为此代码来自我的日志记录代码,该代码与 WCF 和 Web 项目共享,因此您可能只需要第二部分。如果您在开发过程中访问本地主机,您将不会获得 IP —— 正如您所注意到的,您将获得“::1”。但是如果部署在服务器上,你会得到它。

于 2013-07-15T13:24:57.873 回答