Hola, necesito obtener la IP del cliente que solicite algún método en la api web, he intentado usar este código desde aquí pero siempre devuelve la IP local del servidor, ¿cómo llegar de la manera correcta?
HttpContext.Current.Request.UserHostAddress;
de otras preguntas:
public static class HttpRequestMessageExtensions
{
private const string HttpContext = "MS_HttpContext";
private const string RemoteEndpointMessage = "System.ServiceModel.Channels.RemoteEndpointMessageProperty";
public static string GetClientIpAddress(this HttpRequestMessage request)
{
if (request.Properties.ContainsKey(HttpContext))
{
dynamic ctx = request.Properties[HttpContext];
if (ctx != null)
{
return ctx.Request.UserHostAddress;
}
}
if (request.Properties.ContainsKey(RemoteEndpointMessage))
{
dynamic remoteEndpoint = request.Properties[RemoteEndpointMessage];
if (remoteEndpoint != null)
{
return remoteEndpoint.Address;
}
}
return null;
}
}
c#
asp.net
asp.net-web-api
Arbejdsglæde
fuente
fuente
Respuestas:
El siguiente enlace podría ayudarlo. Aquí está el código del siguiente enlace.
referencia: obtener-la-ip-del-cliente-vía-asp-net-web-api
Otra forma de hacer esto es la siguiente.
referencia: cómo-acceder-a-la-dirección-ip-s-del-cliente
Para la versión alojada en la web
Para auto alojado
fuente
Con Web API 2.2:
Request.GetOwinContext().Request.RemoteIpAddress
fuente
Intenta que el IP use
fuente
Si es autohospedado con Asp.Net 2.1 usando el paquete OWIN Self-host NuGet, puede usar el siguiente código:
fuente
Respondiendo a esta publicación de hace 4 años, porque me parece demasiado complicado, al menos si está alojando en IIS y esta publicación es muy alta en DuckDuckGo (y probablemente NSAoogle) para "controlador de API web obtener dirección IP".
Así es como lo resolví:
A diferencia de OP, esto me da la IP del cliente y el nombre de host del cliente, no el servidor. ¿Quizás hayan solucionado el error desde entonces?
fuente
Es mejor lanzarlo a
HttpContextBase
, de esta manera puedes burlarte y probarlo más fácilmentefuente
Creo que esta es la solución más clara, usando un método de extensión:
Así que utilícelo como:
Usamos esto en nuestros proyectos.
Fuente / Referencia: Recuperar la dirección IP del cliente en ASP.NET Web API
fuente
Mi solución es similar a la respuesta del usuario1587439, pero funciona directamente en la instancia del controlador (en lugar de acceder a HttpContext.Current).
En la ventana 'Ver', vi que this.RequestContext.WebRequest contiene la propiedad 'UserHostAddress', pero como se basa en el tipo WebHostHttpRequestContext (que es interno al ensamblado 'System.Web.Http'), no lo estaba poder acceder a él directamente, así que utilicé la reflexión para acceder directamente:
string hostAddress = ((System.Web.HttpRequestWrapper)this.RequestContext.GetType().Assembly.GetType("System.Web.Http.WebHost.WebHostHttpRequestContext").GetProperty("WebRequest").GetMethod.Invoke(this.RequestContext, null)).UserHostAddress;
No digo que sea la mejor solución. el uso de la reflexión puede causar problemas en el futuro en caso de actualización del marco (debido a cambios de nombre), pero para mis necesidades es perfecto
fuente
Esto funciona en mi.
System.Web.HttpContext.Current.Request.UserHostName;
este me devuelve el mismo retorno que obtengo delUserHostAddress
.fuente