2012-09-26 198 views

回答

16
IP = ((HttpContextBase)request.Properties["MS_HttpContext"]).Request.UserHostAddress; 
6

根据this,更完整的方法是:

private string GetClientIp(HttpRequestMessage request) 
{ 
    if (request.Properties.ContainsKey("MS_HttpContext")) 
    { 
     return ((HttpContext)request.Properties["MS_HttpContext"]).Request.UserHostAddress; 
    } 
    else if (request.Properties.ContainsKey(RemoteEndpointMessageProperty.Name)) 
    { 
     RemoteEndpointMessageProperty prop; 
     prop = (RemoteEndpointMessageProperty)this.Request.Properties[RemoteEndpointMessageProperty.Name]; 
     return prop.Address; 
    } 
    else 
    { 
     return null; 
    } 
} 

在过去,对MVC 3个项目(不API,)我们以前用的是以下几点:

string IPAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

if (String.IsNullOrEmpty(IPAddress)) 
    IPAddress = Request.ServerVariables["REMOTE_ADDR"]; 
+1

我最终做了一些额外的研究,因为它会觉得奇怪,你会拿起服务器变量中的请求标头。 context.Request.ServerVariables [“HTTP_X_FORWARDED_FOR”]正在挑选代理服务器和负载均衡器发送的X-Forward-For请求头。 – muglio

11

我正在使用下面的代码,它适用于我......

string ipAddress = System.Web.HttpContext.Current.Request.UserHostAddress; 
+0

它给出主机地址 –

相关问题