2012-09-26 19 views

Respuesta

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

Según this, de una manera más completa sería:

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; 
    } 
} 

En el pasado, el MVC 3 proyectos (no API,) se utilizó para usar lo siguiente:

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

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

Terminé investigando un poco más porque me pareció extraño que recogiera un encabezado de solicitud en una variable de servidor. context.Request.ServerVariables ["HTTP_X_FORWARDED_FOR"] está recogiendo lo que está recogiendo el encabezado de solicitud X-Forward-For enviado por servidores proxy y equilibradores de carga. – muglio

11

Estoy usando el siguiente código y funciona para mí ....

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

Da la dirección del host –

Cuestiones relacionadas